[解決済み] CSS オーバーフローの hidden と visible が親要素の位置に与える奇妙な効果 [重複] について
質問
要素の overflow プロパティが要素の配置にこのような奇妙な影響を与えることを示唆する記述を読んだことがありません。
https://codepen.io/kshetline/pen/ZEzLVxN
この例のトグルボタンをトグルすると、なぜか
<div>
不思議なことに、コンテンツは画面に対して同じ位置にあるにもかかわらず、前のコンテンツを覆うように上方にスライドします(つまり、コンテンツは親の背景に対して下方に移動しています)。
この例は、私がAngularコンポーネントで行おうとしていることを非常に単純化したものです。
<ng-content>
- しかし、この例はCSSとHTMLだけで、関連する変数を分離しようとしているため、JavaScriptはほんの少ししか使っておらず、Angularは使っていません。
は
コンテンツ
を使用すると、HTML 要素を縮小することができます。
transform: scale(
1より小さい倍率
)
しかし、要素のコンテンツが小さく表示されても、デフォルトでは要素のピクセル寸法は同じままです。コンテンツは(特に指定がない限り)要素の中心に向かって縮小し、コンテンツの周囲には空白のスペースが残り、要素は元の縮小されていない寸法のままです。
要素自体が小さくなったと見なすためには、拡大縮小の度合いに合わせて負の余白を計算する必要があります。私もそうしてきましたが、拡大縮小された要素のコンテナにCSSの
overflow
に設定します。
hidden
ネガティブマージンによって取り除かれるはずの余分な空白が、他の要素のレイアウト全体に部分的で説明しにくい影響を及ぼしているような、奇妙な位置関係が発生する可能性があります。
この動作は、Chrome、Firefox、Safari、Edgeで確認されています。したがって、これはCSSの正しい動作だと思いますが、私には理解できません。私は
overflow
に設定します。
visible
これにより、拡大縮小されたコンテンツは、要素の境界で切り取られることなく、フローティングドロップダウンメニューを表示するなどの処理を行うことができます。
let hidden = true;
const inner = document.getElementById('inner')
function toggleOverflow() {
hidden = !hidden;
inner.style.overflow = hidden ? 'hidden' :
'visible'
}
html, body {
height: calc(100vh - 10em);
}
.page {
font: 32px Arial, Helvetica, sans-serif;
height: calc(100% - 1em);
}
.container {
background-color: #ACF;
height: 100%;
}
.outer-wrapper {
background-color: rgba(187, 255, 204, 0.5);
font-size: 2em;
margin: 0 1em;
position: relative;
}
.inner-wrapper {
overflow: hidden;
position: relative;
width: fit-content;
}
.ng-content {
margin: -18.75px 0;
transform: scale(0.5);
}
.container-text {
display: inline-block;
position: absolute;
bottom: 1em;
}
<div class="page">
<button onclick="toggleOverflow()">Toggle Overflow</button><br>
Content outside of the<br>
panel being scaled and its<br>
containing <div>, 32pt font<br>
<div class="container">
<!--Angular component start tag goes here -->
<div class="outer-wrapper">
<div id="inner" class="inner-wrapper">
<div class="ng-content">
50% scaled content goes here, 64pt font
</div>
</div>
</div>
<!-- Angular component end tag goes here -->
<span class="container-text">This is an absolutely positioned <span> in the same <div></span>
</div>
</div>
解決方法は?
から CSS 2.2仕様
新しいブロックフォーマットコンテキストを確立する要素(フロートおよび 'visible' 以外の 'overflow' を持つ要素など)のマージンは、それらのインフロー子と共に折り畳まれない。
そのため
overflow:hidden
は、余白が崩れるのを防いでいます。
関連
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] CSSの親セレクタはありますか?
-
[解決済み] スクロールした後に要素が表示されているかどうかを確認するには?
-
[解決済み] テーブルセルでCSSテキストオーバーフロー?
-
[解決済み] CSS overflow-x: visible; and overflow-y: hidden; によるスクロールバーの不具合について
-
[解決済み] div 内で画像を水平方向にセンタリングする
-
[解決済み】コンテナ要素にフロート要素が含まれる場合、高さが増加しないのはなぜですか?
-
[解決済み】Divの高さが100%で、コンテンツに合わせて拡大される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み】margin-collapsingを無効にする方法は?
-
[解決済み] CSS margin terror; Marginは親要素の外側にスペースを追加する [duplicate] 。