2017-09-28 10 views
2

でモーダルオーバーレイでトップにスクロールすることはできません、これは私の例である:私は背景オーバーレイとモーダルを持つディスプレイフレックス

https://codepen.io/tyrellrummage/full/XeRQYm/

(上部と下部を表示するには、ウィンドウを小さくしますオーバーフロー)。

基本的構造は以下の通りである:

<div class="overlay"> 
    <div class="modal"> 
     //content 
    </div> 
</div> 

と現在スタイリング:

.overlay{ 
    display: flex; 
    align-items: center; 
    justify-content: center; 
    overflow-y: scroll; 
} 

.modal{ 
    margin: 4rem 0; 
} 

これは(切り出し)モーダルの底部のために働くが、頂部がトリミングされます。これはCSSでのみ修正できますか?

+0

あなたは '.overlay {パディングを追加する必要がありますあなたのCSSにMichael_Bのソリューション([pen here](https://codepen.io/)を適用するには:4rem 0; overflow-y:auto; box-sizing:border-box;} .modal {margin:auto 0;} ' anon/pen/aLWeKZ)。)。もう一つのオプションは '.modal'の高さが' .overlay'よりも小さいかどうかをチェックし、 'align-items'プロパティを調整することです:if(document.querySelector( '。overlay').clientHeight .modal')。clientHeight){document.querySelector( '。overlay')。スタイル= 'アライメントアイテム:フレックススタート;';} '@Michael_B:***正確ではありません** *複製。乾杯! –

+0

実際に私は 'align-items:flex-start'を使用しました。あなたが望むなら、それに答えて、私は正しいとマークします。 – nick

+0

質問に重複して回答することはできません。しかし、それは大丈夫です、心配しないでください。マイケルは原則として正しい。あなたの質問***は***重複しています。 ** box-sizing:border-boxを '.overflow'に適用することも知っておく必要があるので、正確なCSSの知識が必要です。将来の訪問者に役立つという点では、あなたの疑問は、重複していることと、それ自身の、適切な、答えに値することとの間のエッジにあります。議論の余地がある。 –

答えて

2

これがなぜ起こるかについての非常に詳しい説明は、in this awesome answerと読むことができます。

topbottomの両方の余白が.modalに設定されており、autoに設定されている必要があります。

の余白をpadding.overlayとする必要があることを意味します。今度は、パディングが、その結果、添加していない、高さから減算されているので、あなたは、また、それにbox-sizing:border-boxを適用する必要があることを意味し、

.modal { 
    margin: auto 0; 
} 
.overlay{ 
    padding: 4rem 0; 
    overflow-y:auto; 
    box-sizing: border-box; 
} 
+0

ニース! btw、詰め物4rem 0をコンテナに追加すると動作しますが、底が切り取られます – nick

+1

Nevermind私はborder-boxを使用していませんでした – nick

関連する問題