このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

overflow プロパティ (CSS)

Baseline
広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

overflowCSS一括指定プロパティで、コンテンツが要素のパディングボックスに収まらない(オーバーフローする)場合に、水平方向および垂直方向の望ましい動作を設定します。

試してみましょう

overflow: visible;
overflow: hidden;
overflow: clip;
overflow: scroll;
overflow: auto;
<section class="default-example" id="default-example">
  <p id="example-element">
    Michaelmas term lately over, and the Lord Chancellor sitting in Lincoln's
    Inn Hall. Implacable November weather. As much mud in the streets as if the
    waters had but newly retired from the face of the earth.
  </p>
</section>
#example-element {
  width: 15em;
  height: 9em;
  border: medium dotted;
  padding: 0.75em;
  text-align: left;
}

構成要素のプロパティ

このプロパティは以下の CSS プロパティの一括指定です。

構文

css
/* キーワード値 */
overflow: visible;
overflow: hidden;
overflow: clip;
overflow: scroll;
overflow: auto;

/* 2 値構文: 水平 | 垂直 */
overflow: hidden visible;

/* グローバル値 */
overflow: inherit;
overflow: initial;
overflow: revert;
overflow: revert-layer;
overflow: unset;

このプロパティは、1 つまたは 2 つの空白区切りの <overflow> キーワード値で指定します。

visible

あふれたコンテンツは切り取られず、要素のパディングボックスの外側に表示されることがあります。この要素ボックスはスクロールコンテナーにはなりません。

hidden

あふれたコンテンツは、要素のパディングボックスで切り取られ、切り取られたコンテンツは非表示になります。この要素ボックスがオーバーフローした場合、そのボックスはスクロールバーのないスクロールコンテナーとなります。ただし、非表示のフォーカス可能な要素へのタブ移動、scrollLeft プロパティ、scrollTo() メソッドなどの他の方法によるスクロールはできます。

clip

あふれたコンテンツは、overflow-clip-margin プロパティを使用して定義された要素のはみ出しクリップ辺で切り取られます。要素ボックスはスクロールコンテナーにはならず、切り取られたコンテンツは表示されず、プログラムによるスクロールは対応していません。

scroll

あふれたコンテンツは、要素のパディングボックスで切り取られます。要素ボックスは、コンテンツがオーバーフローしているかどうかに関わらず、常にスクロールバーを表示させるスクロールコンテナーとなります。

auto

あふれたコンテンツは、要素のパディングボックスで切り取られます。オーバーフローが発生した場合、要素のボックスはスクロールバーを表示させるスクロールコンテナーとなります。

標準外の値

一部のブラウザーでは、標準外の値にも対応しています。

overlay

auto の古い別名で、ウェブ互換性を確保するために仕様書で定義されています。もともとは、スクロールバーが空間を占有するのではなく、コンテンツの上に表示されるようにするための標準外の値として実装されました。新しいコードでの使用は推奨されません。

解説

デフォルトで、ブロックレベル要素はコンテンツに合わせてサイズが伸長します。コンテナーのサイズに制約がある場合、コンテンツはオーバーフローします。overflow プロパティは、コンテナーの端からあふれたコンテンツをどのように扱うかを決定します。

overflow プロパティは、水平方向の overflow-x および垂直方向の overflow-y プロパティの一括指定プロパティです。キーワードが 1 つだけ指定された場合、overflow-xoverflow-y の両方に同じ値が設定されます。キーワードが 2 つ指定された場合、水平方向の overflow-x に 1 つ目の値が適用され、2 つ目には垂直方向の overflow-y に適用されます。

overflow のオプションには、オーバーフローしたコンテンツを非表示にするもの、スクロールバーを表示してオーバーフローしたコンテンツが見られるようにするもの、オーバーフローしたコンテンツを要素ボックスの周囲の領域に流すもの、およびそれらの組み合わせがあります。

visibleclip を除いたすべての値では、新しいブロック整形コンテキストが作成されます。スクロールコンテナーには、新しいブロック整形コンテキストが必要です。浮動ボックスがスクロール要素と重なった場合、スクロールのたびにコンテンツが強制的に改行され、スクロールの動作が重くなってしまうからです。

オーバーフローを作成するもの

オーバーフローは、ブロックレベル要素のコンテンツが、その要素に割り当てられた空間からあふれた場合に発生します。割り当てられる空間は、垂直方向のオーバーフローの場合は高さ(height または max-height)、水平方向のオーバーフローの場合は幅(width または max-width)、ブロック方向のオーバーフローの場合はブロックサイズ(block-size または max-block-size)、インライン方向のオーバーフローの場合はインラインサイズ(inline-size または max-inline-size、または white-spacenowrap を設定)によって制約されることがあります。

次の CSS は、コンテナーのサイズを制限するもので、コンテナーのサイズを制限するボックスモデルのプロパティ値を定義しています。 同時に、content-box に切り取られる背景色も追加しています。これは、後述の説明でオーバーフローしたコンテンツがコンテンツボックスからはみ出す様子を確認しやすくするためです。

css
div {
  height: 10em;
  width: 15em;
  border: 3px solid;
  padding: 10px;

  background-color: #ededed;
  background-clip: content-box;
}

オーバーフロー値について

それぞれの overflow の値によって、要素にスクロールバーが表示されるかどうか、ユーザーやプログラムによってスクロール可能かどうか、そしてその要素がスクロールコンテナーになる(要素のコンテンツがオーバーフローした際に新しいブロック整形コンテキストを生成する)かどうかが定義されます。また、scroll の場合、コンテンツがオーバーフローしていないときでもスクロールコンテナーとなります。

visible

デフォルト値は visible です。デフォルトで、コンテンツがコンテナーの制約範囲からオーバーフローした場合、そのコンテンツはコンテナー内に収まりません。デフォルトで、または明示的に visible に設定された要素にはスクロールバーが表示されず、ユーザーによるスクロールやプログラムによるスクロールもできず、スクロールコンテナーにもなりません。この値では、新しいブロック整形コンテキストは生成されません。

css
div {
  overflow: visible;
}

visibleでは切り取りが一切行われないため、あふれたコンテンツは要素のパディングボックスの外側にも表示され、隣接するコンテンツと重なってしまう可能性があります。

scroll

scrollでは、コンテンツは要素のパディングボックスで切り取られ、ビュー内でスクロールできるようになります。ユーザーエージェントは、コンテンツがあふれているかどうかに関わらず、両方向にスクロールバーを表示させます。これにより、コンテンツの変化に伴ってスクロールバーが現れたり消えたりすることを防ぎます。ただし、プリンターでは、あふれたコンテンツが表示されることがあります。

この要素は、あふれたコンテンツがない場合でも常にスクロールコンテナーとなり、ユーザーによるスクロールとプログラムによるスクロールの両方が可能です。

css
div {
  overflow: scroll;
}

最初の例では、たとえコンテンツがあふれていなくても、スクロールコンテナーが生成されます。2 つ目の例では、コンテンツはパディングボックス内に切り取られ、スクロールバーを使ってあふれたコンテンツまでスクロールできるようになっています。

auto

auto の場合、要素にスクロールバーが表示されるか、またその要素がスクロールコンテナーとなるかどうかは、要素にあふれるコンテンツがあるかどうかに依存します。要素に含まれるコンテンツがあふれた場合、その挙動は scroll と同様にになります。つまり、あふれたコンテンツは要素のパディングボックスで切り取られ、スクロールバーを使用してあふれたコンテンツを画面内にスクロールして表示することができます。scroll とは異なり、ユーザーエージェントは、コンテンツがあふれている場合にのみスクロールバーを表示します。コンテンツが要素のパディングボックス内に収まる場合、見た目は visible の場合と同じになりますが、それでも新しい整形コンテキストが確立されます。要素のボックスがスクロールコンテナーとなるのは、あふれたコンテンツがある場合のみです。

css
div {
  overflow: auto;
}

2 値構文を使用した場合、一方の値が visible に設定されているとき、もう一方の値が visible または clip でない限り、その visible のオーバーフロー方向は auto として扱われます。

hidden

hidden を指定すると、あふれたコンテンツは要素のパディングボックスで切り取られます。スクロールバーは表示されず、切り取られたコンテンツは表示されません(つまり、「非表示」になります)。

コンテンツがはみ出している場合、その要素はスクロールコンテナーとなります。スクロールバーは表示されず、ユーザーがタッチスクリーン上でドラッグしたり、マウスのスクロールホイールを使用したりといった操作を行っても、切り取られた領域外のコンテンツを表示することはできませんが、非表示になっているあふれたコンテンツをスクロールして表示することは可能です。

コンテンツにフォーカス可能な要素が含まれている場合、タブキーを押すと、現在フォーカスが当たっている要素が画面上に表示されます。また、コンテンツはプログラムによってスクロールすることも可能です。scrollLeft または scrollTop プロパティに値を設定すると、それぞれ左端または上端からその距離だけスクロールされます。また、scrollTo() メソッドを使用してスクロールすることもできます。

css
div {
  overflow: hidden;
}

最初の例にはあふれたコンテンツがないため、スクロールコンテナーにはなりません。2 つ目の例では、コンテンツがあふれていますが、パディングボックス内に切り取られています。あふれたコンテンツにスクロールするためのスクロールバーはありませんが、隠れたコンテンツ内の <input> までタブキーで移動するなどして、そのコンテンツを画面内に表示させることは可能です。2 つ目の例はスクロールコンテナーです。

clip

clipの場合、あふれたコンテンツはデフォルトで非表示となり、スクロールバーは表示されず、プログラムによるスクロールもできません。この要素はスクロールコンテナーではなく、新しい 整形コンテキストも生成されません。切り取られたコンテンツに対話型コンテンツが含まれている場合、非表示のフォーカス可能なコンテンツはキーボードフォーカスを受け取りますが、そのコンテンツは画面内にスクロールされて表示されないため、キーボードユーザーはアクセスできなくなります。

clipの場合、あふれたコンテンツは、overflow-clip-margin プロパティで定義された要素のオーバーフロー切り取り辺で切り取られます。切り取られたコンテンツは、overflow-clip-margin<length> 値分だけ、要素のパディングボックスからはみ出します。この値のデフォルトは 0px です。

css
div {
  overflow: clip;
}

2 つ目の例では、あふれたコンテンツが切り取られています。非表示のコンテンツ内の <input> までタブキーで移動すると、その要素にフォーカスが移りますが、画面内にスクロールされて表示されることはなく、その結果、キーボードユーザーはそのコンテンツにアクセスできません。

2 値構文を使用した場合、一方の値が clip に設定されているとき、もう一方の値が visible または clip に設定されていないと、その clip のオーバーフロー方向は hidden として扱われます。

スクロール駆動アニメーションの場合

scroll() 関数を使用してスクロール駆動アニメーションを作成する際、切り取られた領域内に対話型コンテンツがない場合は、明示的にスクロールコンテナーを生成したい場合を除き、hidden の代わりに clip 使用することを検討してください。

hiddenclip の両方では、はみ出した領域は切り取られますが、overflow: clip ではスクロールコンテナーが作成されないため、ユーザーエージェントが DOM ツリーを遡って最も近い親のスクロールコンテナーを探す際、切り取られた要素はスキップされます。

overflow: hidden は、コンテンツがあふれた場合にスクロールコンテナーを生成するため、意図せずスクロールしないスクロール親要素を作成してしまうことがあります。ただし、対話型コンテンツが切り取られていないことを確認できる場合にのみ、clip を使用してください。

置換要素のオーバーフロー

画像やその他の置換要素に対して overflow を設定すると、CSS Overflow Module Level 4 に対応しているブラウザーでは期待どおりに動作します。以前の版の仕様書では、置換要素は常にバウンディングコンテナーに合わせて切り取られていました。

最新のブラウザーの対応状況に関する情報については、ブラウザーの互換性の表をご覧ください。

公式定義

初期値visible
適用対象ブロックコンテナー, フレックスコンテナー, グリッドコンテナー
継承なし
計算値一括指定の次の各プロパティとして
  • overflow-x: 指定通り、ただし overflow-xoverflow-y のどちらかが visible でも clip でもない場合は、 visible/clip はそれぞれ auto/hidden と計算される
  • overflow-y: 指定通り、ただし overflow-xoverflow-y のどちらかが visible でも clip でもない場合は、 visible/clip はそれぞれ auto/hidden と計算される
アニメーションの種類離散値

形式文法

overflow = 
<'overflow-block'>{1,2}

<overflow-block> =
visible |
hidden |
clip |
scroll |
auto
この構文は CSS Overflow Module Level 3 による最新の標準を反映しています。すべてのブラウザーがすべての部分を実装しているわけではありません。サポート情報についてはブラウザーの互換性を参照してください。

アクセシビリティ

ブラウザーによっては、スクロール可能なコンテンツ領域がキーボードフォーカスを受け取らないため、キーボードのみを使用するユーザーはスクロールできません。キーボードのみを使用するすべてのユーザーがコンテナーをスクロールすることができるようにするには、tabindex="0" をコンテナーに設定して要素がフォーカスを受け取れるようにする必要があります。コンテナがフォーカスを受け取った際に、スクリーンリーダーのユーザーにコンテキストを伝えるため、コンテナーに適切な WAI-ARIA ロールrole="region" など)とアクセシブル名(aria-label または aria-labelledby を使用して)を指定してください。

様々な overflow キーワードの結果のデモ

HTML

html
<div>
  <code>visible</code>
  <p class="visible">
    Maya Angelou: "I've learned that people will forget what you said, people
    will forget what you did, but people will never forget how you made them
    feel."
  </p>
</div>

<div>
  <code>hidden</code>
  <p class="hidden">
    Maya Angelou: "I've learned that people will forget what you said, people
    will forget what you did, but people will never forget how you made them
    feel."
  </p>
</div>

<div>
  <code>clip</code>
  <p class="clip">
    Maya Angelou: "I've learned that people will forget what you said, people
    will forget what you did, but people will never forget how you made them
    feel."
  </p>
</div>

<div>
  <code>scroll</code>
  <p class="scroll">
    Maya Angelou: "I've learned that people will forget what you said, people
    will forget what you did, but people will never forget how you made them
    feel."
  </p>
</div>

<div>
  <code>auto</code>
  <p class="auto">
    Maya Angelou: "I've learned that people will forget what you said, people
    will forget what you did, but people will never forget how you made them
    feel."
  </p>
</div>

CSS

css
p.visible {
  overflow: visible;
}

p.hidden {
  overflow: hidden;
}

p.clip {
  overflow: clip;
  overflow-clip-margin: 1em;
}

p.scroll {
  overflow: scroll;
}

p.auto {
  overflow: auto;
}

結果

仕様書

仕様書
CSS Overflow Module Level 3
# propdef-overflow
Scalable Vector Graphics (SVG) 2
# OverflowAndClipProperties

ブラウザーの互換性

関連情報