CSSのwidthで要素の横幅を指定する方法をわかりやすく解説

スポンサーリンク

width プロパティは、要素の横幅を指定するために使用されます。このプロパティに指定できる値によって、要素の表示方法を柔軟にコントロールできます。

スポンサーリンク

width プロパティの値とその効果の一覧

  • px: 固定のピクセル数で横幅を指定します。
  • %: 親要素に対する割合で横幅を指定します。
  • auto: 要素の内容や親要素に応じて自動的に幅を決定します。
  • max-content: コンテンツの幅に合わせて自動的に最大の幅を設定します。
  • min-content: コンテンツに必要な最小限の幅を設定します。
  • fit-content(): 指定した値に基づき、要素の幅を調整します。(使用できるブラウザは限定される)

widthが効かない時の原因と対策

要素がインライン要素である

widthプロパティは、ブロックレベル要素に対して効果を発揮しますが、<span><a>などのインライン要素には適用されません。インライン要素にwidthを設定しても、その効果は無視されます。

対策: インライン要素にwidthを適用したい場合は、display: inline-block;display: block;に変更して、要素がブロックレベルになるようにします。例えば、<span style="display: inline-block; width: 200px;">のように指定します。

要素の親にdisplay: flexやdisplay: gridが設定されている

親要素にdisplay: flexdisplay: gridが設定されている場合、子要素のwidthプロパティが期待通りに適用されないことがあります。これらのレイアウトは、子要素のサイズを親要素の配置に基づいて自動的に調整することがあるため、widthが無視されることがあります。

対策: 子要素に対してflex-basis(フレックスボックスの場合)やgrid-template-columns(グリッドの場合)を使用してサイズを制御します。例えば、flex-basis: 200px;のように設定することで、フレックスボックス内の要素の幅を調整できます。

要素のbox-sizingがborder-boxに設定されている

box-sizing: border-box;が設定されていると、widthは要素のパディングやボーダーを含めた全体の幅を指定します。パディングやボーダーがある場合、それらがwidthに含まれるため、要素の幅が期待よりも小さく見えることがあります。

対策: box-sizingの設定を確認し、必要に応じてbox-sizing: content-box;に変更するか、パディングやボーダーを調整して、期待通りの幅になるようにします。例えば、box-sizing: content-box;を使用すると、widthはコンテンツ部分だけを指定するようになります。

共通するCSSコード

.css-sample-container {
  margin-bottom: 20px;
  border: 1px solid #333;
  padding: 10px;
}

.css-sample-content {
  background-color: lightblue;
  padding: 10px;
}
  

width: 300px

横幅を固定の300pxで指定した例です。

HTMLコード

<div class="css-sample-container">
  <div class="css-sample-content css-sample-width-px">
    横幅が300pxに固定されます。
  </div>
</div>
  

CSSコード

.css-sample-width-px {
  width: 300px;
}
  

表示結果

横幅が300pxに固定されます。

width: 50%

横幅を親要素に対して50%で指定した例です。

HTMLコード

<div class="css-sample-container">
  <div class="css-sample-content css-sample-width-percentage">
    親要素の50%の幅が適用されます。
  </div>
</div>
  

CSSコード

.css-sample-width-percentage {
  width: 50%;
}
  

表示結果

親要素の50%の幅が適用されます。

width: auto

横幅を自動的に決定する例です。

HTMLコード

<div class="css-sample-container>
  <div class="css-sample-content css-sample-width-auto"">
    横幅が自動的に設定されます。
  </div>
</div>
  

CSSコード

.css-sample-width-auto {
  width: auto;
}
  

表示結果

横幅が自動的に設定されます。

width: max-content

横幅をコンテンツの最大幅に合わせる例です。

HTMLコード

<div class="css-sample-container">
  <div class="css-sample-content css-sample-width-max-content">
    横幅がコンテンツの最大幅に合わせられます。
  </div>
</div>
  

CSSコード

.css-sample-width-max-content {
  width: max-content;
}
  

表示結果

横幅がコンテンツの最大幅に合わせられます。

width: min-content

横幅をコンテンツの最小限の幅に設定する例です。

HTMLコード

<div class="css-sample-container">
  <div class="css-sample-content css-sample-width-min-content">
    横幅がコンテンツの最小限の幅に設定されます。
  </div>
</div>
  

CSSコード

.css-sample-width-min-content {
  width: min-content;
}
  

表示結果

横幅がコンテンツの最小限の幅に設定されます。

width: fit-content(200px)

横幅をコンテンツに合わせつつ、最大200pxに制限する例です。ただし、使用できるブラウザは限定されます。推奨できません。

HTMLコード

<div class="css-sample-container">
  <div class="css-sample-content css-sample-width-fit-content">
    横幅がコンテンツに合わせつつ、最大200pxに制限されます。
  </div>
</div>
  

CSSコード

.css-sample-width-fit-content {
  width: fit-content(200px);
}
  

表示結果

横幅がコンテンツに合わせつつ、最大200pxに制限されます。

まとめ

  • width: 300px: 固定ピクセルの横幅。
  • width: 50%: 親要素の横幅に対する割合。
  • width: auto: 自動的に横幅を決定。
  • width: max-content: コンテンツの最大幅に合わせる。
  • width: min-content: コンテンツの最小限の幅に設定。
  • width: fit-content(): コンテンツに基づいて最大値を制限。