Divが拡大しないようにするにはどうすればよいですか?要素を含むdivが、使用可能なスペースを100%占有せず、子が持つ幅を持っていることを望んでいます。親divを水平方向に中央揃えするためにこれが必要です。秘訣は、子要素がfloat:leftまたはdiplay:inline-blockとfluid widthを共有する必要があるため、子要素の行が少なくなる可能性があることです。
レスポンシブデザインが壊れてしまうため、各行を独自のdivでラップすることはできません。
display: table;
を使用する必要があります。コンテンツのサイズに縮小され、指定された幅を割り当てることなく、中央に配置して配置することもできます。
子のwidthプロパティをfit-content
に設定できます。そうすることで、これらの要素は必要なだけ水平方向のスペースを占有し、親内で使用できるようになります。
Widthをmax-content
に設定することもできますが、これは親の幅を無視し、コンテンツは子孫が必要とする限り拡張され、場合によっては親をオーバーフローさせます。
例:
問題の設定:
.parent {
width: 15rem;
height: 5rem;
border: 1px solid blue;
}
.child {
border: 1px solid red;
}
<div class="parent">
<div class="child">
Content for child
</div>
</div>
解決:
.parent {
width: 15rem;
height: 5rem;
border: 1px solid blue;
}
.child {
width: fit-content;
border: 1px solid red;
}
<div class="parent">
<div class="child">
Content for child
</div>
</div>
fit-content
のサポートはかなり良いです( caniuse ?)。この投稿の時点で、IE、Edge、Operaを除くすべてのブラウザでfit-content
が少なくともある程度サポートされています。
親div
をその子要素の周りで本当に折りたたむ必要があり(何らかの理由で、達成しようとしていることに基づいて)、そのdiv
を中央に配置したい場合は、@ Vector's答えは的確です。display: table
とmargin: 0 auto
を使用してください。
div
を、子供を中央に配置しようとしているコンテナの全幅に拡張したままでも問題がない場合は、特定の状況に応じて、少なくとも2つのオプションがあります。
text-align: center
を使用できます。
.content {
text-align: center;
border-style: solid;
border-width: thin;
}
.content span {
display: inline;
border-style: solid;
border-width: thin;
}
<div class="content">
<div>Test</div>
<div>Test</div>
</div>
もちろん、サポートしているブラウザの互換性のレベルに応じて、新しいdisplay: flex
をjustify-content: center
と一緒に使用することもできます。
.content {
display: flex;
justify-content: center;
border-style: solid;
border-width: thin;
}
.content div {
border-style: solid;
border-width: thin;
}
<div class="content">
<div>Test</div>
<div>Test</div>
</div>
display: inline-block
を使ってみましたか? DIVはブロック要素であるため、100%の幅を占めます。