.modal-container { 位置:固定; 頂部:0; 左:0; 底部:0; 右:0; 背景:rgba(0,0,0,0.5); 溢出-x:自動; } .modal-container .modal-window { 顯示:-ms-flexbox; 顯示:柔性; 彈性方向:列; 對齊項(xiàng)目:居中; 調(diào)整內(nèi)容:居中; /* 確認(rèn)滾動行為的可選支持在 IE10 中有意義 //-ms-flex-方向:列; //-ms-flex-align: 中心; //-ms-flex-pack: 中心; */ 高度:100%; } .modal-container .modal-window .modal-content { 邊框:1px實(shí)心#ccc; 邊框半徑:4px; 背景:#fff; 寬度:100%; 最大寬度:500px; 內(nèi)邊距:10 像素 }</前> <pre class="brush:html;toolbar:false;"><div class="modal-container"> <div class="modal-window"> <div class="modal-content"> <p class="p3">Lorem Ipsum 是印刷和排版行業(yè)的簡單虛擬文本。自 1500 年代以來,Lorem Ipsum 一直是行業(yè)標(biāo)準(zhǔn)的虛擬文本,當(dāng)時(shí)一位不知名的印刷商拿走了一堆字體并將其打亂以制作一本字體樣本簿。它不僅經(jīng)歷了五個(gè)世紀(jì)的考驗(yàn),而且跨越了電子排版的時(shí)代,基本保持不變。它在 20 世紀(jì) 60 年代隨著包含 Lorem Ipsum 段落的 Letraset 表的發(fā)布而流行起來,最近又隨著包含 Lorem Ipsum 版本的 Aldus PageMaker 等桌面出版軟件而流行。 <p class="p3">Lorem Ipsum 是印刷和排版行業(yè)的簡單虛擬文本。自 1500 年代以來,Lorem Ipsum 一直是行業(yè)標(biāo)準(zhǔn)的虛擬文本,當(dāng)時(shí)一位不知名的印刷商拿走了一堆字體并將其打亂以制作一本字體樣本簿。它不僅經(jīng)歷了五個(gè)世紀(jì)的考驗(yàn),而且跨越了電子排版的時(shí)代,基本保持不變。它在 20 世紀(jì) 60 年代隨著包含 Lorem Ipsum 段落的 Letraset 表的發(fā)布而流行起來,最近又隨著包含 Lorem Ipsum 版本的 Aldus PageMaker 等桌面出版軟件而流行。 <p class="p3">Lorem Ipsum 是印刷和排版行業(yè)的簡單虛擬文本。自 1500 年代以來,Lorem Ipsum 一直是行業(yè)標(biāo)準(zhǔn)的虛擬文本,當(dāng)時(shí)一位不知名的印刷商拿走了一堆字體并將其打亂以制作一本字體樣本簿。它不僅經(jīng)歷了五個(gè)世紀(jì)的考驗(yàn),而且跨越了電子排版的時(shí)代,基本保持不變。它在 20 世紀(jì) 60 年代隨著包含 Lorem Ipsum 段落的 Letraset 表的發(fā)布而流行起來,最近又隨著包含 Lorem Ipsum 版本的 Aldus PageMaker 等桌面出版軟件而流行。
我只用了3個(gè)容器就實(shí)現(xiàn)了這個(gè)效果。訣竅是將flexbox容器與控制滾動的容器分開。最后,將所有內(nèi)容放入一個(gè)根容器以居中顯示。以下是創(chuàng)建效果所需的關(guān)鍵樣式:
.root { display: flex; justify-content: center; align-items: center; } .scroll-container { margin: auto; max-height: 100%; overflow: auto; } .flex-container { display: flex; flex-direction: column; justify-content: center; }
<div class="root"> <div class="scroll-container"> <div class="flex-container"> <p>Lorem ipsum dolor sit amet.</p> </div> </div> </div>
我在這里創(chuàng)建了一個(gè)演示:https://jsfiddle.net/r5jxtgba/14/
Flexbox使居中變得非常容易。
只需將align-items: center
和justify-content: center
應(yīng)用于flex容器,您的flex項(xiàng)目將垂直和水平居中。
然而,當(dāng)flex項(xiàng)目大于flex容器時(shí),這種方法存在一個(gè)問題。
如問題中所指出的,當(dāng)flex項(xiàng)目溢出容器時(shí),頂部變得無法訪問。
對于水平溢出,左側(cè)部分變得無法訪問(或者在RTL語言中為右側(cè)部分)。
下面是一個(gè)LTR容器的示例,其中包含justify-content: center
和三個(gè)flex項(xiàng)目:
有關(guān)此行為的說明,請參見本答案底部。
為了解決這個(gè)問題,請使用flexbox自動邊距,而不是justify-content
。
使用auto
邊距,溢出的flex項(xiàng)目可以在垂直和水平方向上居中,而不會失去對其任何部分的訪問。
所以,不要在flex容器上使用這段代碼:
#flex-container { align-items: center; justify-content: center; }
在flex項(xiàng)目上使用這段代碼:
.flex-item { margin: auto; }
將safe
值添加到您的關(guān)鍵字對齊規(guī)則中,如下所示:
justify-content: safe center
或者
align-self: safe center
注意:Box Alignment模塊適用于多個(gè)盒子布局模型,而不僅僅是flex。因此,在上述規(guī)范摘錄中,方括號中的術(shù)語實(shí)際上是“對齊主體”、“對齊容器”和“start
”。我使用了特定于flex的術(shù)語,以保持對這個(gè)特定問題的關(guān)注。