From 917253d3b482c4083e0472ea84a97a1ff0b3a422 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Mon, 30 Sep 2024 15:29:32 +0900 Subject: [PATCH] =?UTF-8?q?2024/07/29=20=E6=99=82=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=9F=BA=E3=81=A5=E3=81=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/ja/web/css/overflow/index.md | 130 +++++++++++++++++++---------- 1 file changed, 84 insertions(+), 46 deletions(-) diff --git a/files/ja/web/css/overflow/index.md b/files/ja/web/css/overflow/index.md index 10ea503be761b7..83b2e8cb78fc97 100644 --- a/files/ja/web/css/overflow/index.md +++ b/files/ja/web/css/overflow/index.md @@ -1,11 +1,13 @@ --- title: overflow slug: Web/CSS/overflow +l10n: + sourceCommit: 59a92ab5609f0a021602f11843f3b00b16e67e6d --- {{CSSRef}} -`overflow` は [CSS](/ja/docs/Web/CSS) の[一括指定プロパティ](/ja/docs/Web/CSS/Shorthand_properties)で、要素のオーバーフロー時、すなわち、要素の内容が多すぎて[ブロック整形コンテキスト](/ja/docs/Web/Guide/CSS/Block_formatting_context)に収まらない場合の望ましい動作を両方向について設定します。 +**`overflow`** は [CSS](/ja/docs/Web/CSS) の[一括指定プロパティ](/ja/docs/Web/CSS/Shorthand_properties)で、コンテンツが要素のパディングボックスに収まらない(はみ出す)場合に、水平方向および垂直方向の望ましい動作を設定します。 {{EmbedInteractiveExample("pages/css/overflow.html")}} @@ -31,52 +33,39 @@ overflow: hidden visible; overflow: inherit; overflow: initial; overflow: revert; +overflow: revert-layer; overflow: unset; ``` -`overflow` プロパティは、以下の値の一覧のうち一つまたは二つのキーワードで指定します。二つのキーワードが指定された場合、最初の値が `overflow-x` で、二つ目の値が `overflow-y` になります。それ以外の場合、 `overflow-x` および `overflow-y` は同じ値に設定されます。 +`overflow` プロパティは、1 つまたは 2 つの {{CSSXref("overflow_value", "<overflow>")}} キーワード値として指定される。キーワードが 1 つだけ指定された場合、`overflow-x` と `overflow-y` の両方が同じ値に設定される。2 つのキーワードが指定された場合、最初の値は水平方向の `overflow-x` に適用され、2 番目の値は垂直方向の `overflow-y` に適用されます。 ### 値 - `visible` - - : 内容はクリッピングされず、パディングボックスの外側に表示されることがあります。 + - : 溢れたコンテンツは切り取られず、要素のパディングボックスの外側に表示されることがあります。要素ボックスは{{glossary("scroll container", "スクロールコンテナー")}}ではありません。これは `overflow` プロパティの既定値です。 - `hidden` - - : 内容は、必要に応じてパディングボックスに合わせて切り取られます。スクロールバーは表示されず、ユーザーがスクロールできるようにするための対応 (ドラッグやスクロールホイールによる方法) もありません。内容はプログラム的に (例えば、 {{domxref("HTMLElement.offsetLeft", "offsetLeft")}} のようなプロパティの値を設定する方法などで) スクロールすることができますので、要素はスクロールコンテナーになります。 + - : 溢れたコンテンツは要素のパディングボックスで切り取られます。スクロールバーはなく、切り取られたコンテンツは見えなくなります(つまり、切り取られたコンテンツは非表示になります)が、コンテンツはまだ存在しています。ユーザーエージェントはスクロールバーを追加せず、また、タッチスクリーンでのドラッグやマウスのスクロールホイールなどの操作によって、ユーザーが切り取られた領域の外にあるコンテンツを表示することもできません。コンテンツはプログラムによってスクロールさせることができ(例えば、アンカーテキストへのリンク、非表示でありながらフォーカス可能な要素へのタブ操作、{{domxref("Element.scrollLeft", "scrollLeft")}} プロパティの値や {{domxref("Element.scrollTo", "scrollTo()")}} メソッドの設定など)、この場合、要素ボックスはスクロールコンテナーとなります。 - `clip` - - : `hidden` と同様に、コンテンツは要素のパディングボックスに合わせて切り取られます。 `clip` と `hidden` の違いは、 `clip` キーワードがプログラム的なスクロールも含め、すべてのスクロールを禁止することです。ボックスはスクロールコンテナーにはならず、新しい整形コンテキストを始めることもありません。新しい整形コンテキストを始めたいのであれば、 {{cssxref("display", "display: flow-root", "#flow-root")}} を使用して実現することができます。 + - : 溢れたコンテンツは、[`overflow-clip-margin`](/ja/docs/Web/CSS/overflow-clip-margin) プロパティを使用して定義された要素のはみ出しクリップ辺で切り取られます。その結果、コンテンツは要素のパディングボックスを `overflow-clip-margin` の {{cssxref("<length>")}} 値分、または設定されていない場合は `0px` 分はみ出します。切り取られた領域の外側に溢れたコンテンツは表示されず、ユーザーエージェントはスクロールバーを追加せず、プログラムによるスクロールも行われません。新しい[整形コンテキスト](/ja/docs/Web/CSS/CSS_display/Block_formatting_context)は作成されません。整形コンテキストを確立するには、`overflow: clip` を {{cssxref("display", "display: flow-root", "#flow-root")}} とともに使用してください。この要素ボックスはスクロールコンテナーにはなりません。 - `scroll` - - : 内容は、必要に応じてパディングボックスに合わせて切り取られます。コンテンツが変化したときに、スクロールバーが現れたり消えたりするのを防ぐため、ブラウザーは内容がクリッピングされるかどうかに関わらず、スクロールバーを常に表示します。プリンターはあふれた部分の内容を印刷する可能性があります。 + - : 溢れたコンテンツは要素のパディングボックスで切り取られ、スクロールバーを使用してスクロールさせることで、溢れたコンテンツを表示することができます。ユーザーエージェントは、コンテンツが溢れているか否かに関わらずスクロールバーを表示します。そのため、このキーワードを使用すると、コンテンツが変化するたびにスクロールバーが表示されたり非表示になったりすることを防ぐことができます。ただし、印刷時には溢れたコンテンツが印刷される場合があります。要素ボックスはスクロールコンテナーになります。 - `auto` + - : 溢れたコンテンツは要素のパディングボックスで切り取られ、溢れたコンテンツはスクロールバーを使ってスクロールして表示することができます。`scroll` とは異なり、ユーザエージェントはコンテンツが溢れた場合にのみスクロールバーを表示します。コンテンツが要素のパディングボックス内に収まる場合、`visible` と同じように見えますが、新しい整形コンテキストを確立します。要素ボックスはスクロールコンテナーになります。 - - : {{Glossary("user agent", "ユーザーエージェント")}}に依存します。内容がパディングボックス内に収まる場合は `visible` と同じように表示されますが、新しいブロック整形コンテキストを生成します。デスクトップブラウザーは内容があふれる場合、スクロールバーを表示します。 - -- `overlay` {{deprecated_inline}} - - : `auto` と同じ動作をしますが、場所を取る代わりに内容の先頭にスクロールバーを表示します。 WebKit ベース (例えば Safari) 及び Blink ベース (例えば Chrome 又は Opera) のブラウザーでのみ対応しています。 - -#### Mozilla 拡張 - -- `-moz-scrollbars-none` {{deprecated_inline}} - - : 代わりに `overflow: hidden` を使ってください。 -- `-moz-scrollbars-horizontal` {{deprecated_inline}} - - : `{{Cssxref("overflow-x")}}: scroll` および `{{Cssxref("overflow-y")}}: hidden`、または `overflow: scroll hidden` を代わりに使用してください。 -- `-moz-scrollbars-vertical` {{deprecated_inline}} - - : `{{Cssxref("overflow-x")}}: hidden` および `{{Cssxref("overflow-y")}}: scroll`、または `overflow: hidden scroll` を代わりに使用してください。 -- `-moz-hidden-unscrollable` {{deprecated_inline}} - - : 代わりに `overflow: clip` を使用してください。 - -Firefox 63 において、 `-moz-scrollbars-none`, `-moz-scrollbars-horizontal`, `-moz-scrollbars-vertical` は機能設定で隠されています。 about:config の中で `layout.css.overflow.moz-scrollbars.enabled` を `true` に設定してください。 +> [!NOTE] +> キーワード値 `overlay` は、`auto` の値の古い別名です。 `overlay` を使用すると、スクロールバーは空間を占有するのではなく、コンテンツの上に描画されます。 ## 解説 -オーバーフローの選択肢としては、クリッピング、スクロールバーの表示、コンテナーの外側にはみ出して周囲の領域に表示するものがあります。 +overflow のオプションには、溢れたコンテンツを非表示にするもの、スクロールバーを表示して溢れたコンテンツが見られるようにするもの、溢れたコンテンツを要素ボックスの周囲の領域に流すもの、およびそれらの組み合わせがあります。 -値を (既定値の) `visible` 以外の値に指定すると、新たな[ブロック整形コンテキスト](/ja/docs/Web/Guide/CSS/Block_formatting_context)を生成します。これは技術的な理由で必要なものです。そうでなければ、もしスクロールする要素に浮動要素が交差している時、スクロールするごとに強制的に折り返し処理をやり直すことになり、スクロール操作が遅くなる原因になるからです。 +`overflow` の各キーワードを使用する際には、以下の点に留意してください。 -`overflow` の効果を得るには、ブロックレベルコンテナーに高さ (`height` または `max-height`) を設定するか、 `white-space` を `nowrap` に設定することが必要です。 - -一方の軸を`visible` (既定値) に設定して、もう一方を他の値に設定すると、 `visible` は `auto` として動作する結果になります。 - -JavaScript の {{domxref("Element.scrollTop")}} プロパティは、 `overflow` が `hidden` に設定されている場合でも HTML 要素をスクロールさせるために使うことができます。 +- `overflow` に `visible`(既定値)または `clip` 以外の値を指定すると、新しい[ブロック整形コンテキスト](/ja/docs/Web/CSS/CSS_display/Block_formatting_context)が作成されます。これは技術的な理由から必要です。浮動要素がスクロール要素と交差する場合、スクロールのステップごとにコンテンツが強制的に再配置されるため、スクロールの使い勝手が悪くなります。 +- `overflow` の設定で期待通りの効果を出すには、溢れる方向が垂直方向の場合は高さ({{cssxref("height")}} または {{cssxref("max-height")}})、溢れる方向が水平方向の場合は幅({{cssxref("width")}} または {{cssxref("max-width")}})、溢れる方向がブロック方向の場合はブロックサイズ({{cssxref("block-size")}} または {{cssxref("max-block-size")}})、溢れる方向がインライン方向の場合はインラインサイズ({{cssxref("inline-size")}} または {{cssxref("max-inline-size")}})に加えて {{cssxref("white-space")}} に `nowrap` を、いずれかをブロックレベル要素に設定する必要があります。 +- いずれかの方向で overflow を `visible`(すなわち、`overflow-x` または `overflow-y`)に設定する場合、もう一方の方向を `visible` または `clip` に設定する必要があり、そうしないと、`visible` の値は `auto` として動作します。 +- いずれかの方向で overflow を `clip` に設定する場合、もう一方の方向を `visible` または `clip` に設定する必要があり、そうしないと、`clip` の値は `hidden` として動作します。 +- JavaScript の {{domxref("Element.scrollTop")}} プロパティは、 `overflow` が `hidden` に設定されている場合でも HTML 要素をスクロールさせるために使うことができます。 ## 公式定義 @@ -86,9 +75,15 @@ JavaScript の {{domxref("Element.scrollTop")}} プロパティは、 `overflow` {{csssyntax}} +## アクセシビリティ + +スクロールするコンテンツ領域は、キーボードのみを使用するユーザーにはスクロールできません。ただし、Firefox を使用しているユーザーは例外です(Firefox では、コンテナーが既定ではキーボード操作可能に設定されています)。 + +開発者として、Firefox 以外のキーボードのみ操作のユーザーにコンテナーのスクロールを許可するには、[`tabindex`](/ja/docs/Web/HTML/Global_attributes/tabindex) 属性を使用して `tabindex="0"` と指定する必要があります。残念ながら、スクリーンリーダーがこのタブストップに遭遇すると、それが何であるかのコンテキストを保有していないため、スクリーンリーダーはそのコンテンツ全体をアナウンスする可能性が高いです。適切な WAI-ARIA ロール(例えば `role="region"`)とアクセシブル名([`aria-label`](/ja/docs/Web/Accessibility/ARIA/Attributes/aria-label) または [`aria-labelledby`](/ja/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby) によって)を指定することで、この問題を軽減できます。 + ## 例 -### テキストに様々な overflow の値を設定 +### 様々な overflow キーワードの結果のデモ #### HTML @@ -96,55 +91,86 @@ JavaScript の {{domxref("Element.scrollTop")}} プロパティは、 `overflow`
visible

- Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium - doloremque laudantium. + 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."

hidden +
+ +
+ 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."

scroll

- Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium - doloremque laudantium. + 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."

auto

- Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium - doloremque laudantium. + 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." +

+
+ +
+ overlay +

+ 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."

``` #### CSS -```css +```css hidden body { display: flex; - justify-content: space-around; + flex-wrap: wrap; + justify-content: start; } div { - margin: 1em; + margin: 2em; font-size: 1.2em; } p { - width: 8em; + width: 5em; height: 5em; border: dotted; + margin-top: 0.5em; } +div:nth-of-type(5), +div:nth-of-type(6) { + margin-top: 200px; +} +``` + +```css p.visible { overflow: visible; } @@ -153,6 +179,11 @@ p.hidden { overflow: hidden; } +p.clip { + overflow: clip; + overflow-clip-margin: 1em; +} + p.scroll { overflow: scroll; } @@ -160,11 +191,15 @@ p.scroll { p.auto { overflow: auto; } + +p.overlay { + overflow: overlay; +} ``` #### 結果 -{{EmbedLiveSample("Setting_different_overflow_values_for_text", "600", "250")}} +{{EmbedLiveSample("様々な_overflow_キーワードの結果のデモ", "500", "620")}} ## 仕様書 @@ -176,5 +211,8 @@ p.auto { ## 関連情報 -- 関連 CSS プロパティ: {{cssxref("text-overflow")}}, {{cssxref("white-space")}}, {{Cssxref("overflow-x")}}, {{Cssxref("overflow-y")}}, {{Cssxref("overflow-inline")}}, {{Cssxref("overflow-block")}}, {{Cssxref("clip")}}, {{Cssxref("display")}} -- [CSS オーバーフロー](/ja/docs/Web/CSS/CSS_Overflow) および [スクロール可能なオーバーフローのデバッグ](/ja/docs/Tools/Page_Inspector/How_to/Debug_Scrollable_Overflow) +- {{Cssxref("overflow-x")}}, {{Cssxref("overflow-y")}} +- {{Cssxref("overflow-block")}}, {{Cssxref("overflow-clip-margin")}}, {{Cssxref("overflow-inline")}} +- {{Cssxref("clip")}}, {{Cssxref("display")}}, {{cssxref("text-overflow")}}, {{cssxref("white-space")}} +- [CSS オーバーフロー](/ja/docs/Web/CSS/CSS_overflow) +- [Keyboard-only scrolling areas](https://adrianroselli.com/2022/06/keyboard-only-scrolling-areas.html) on adrianroselli.com (2022)