我想垂直對齊一組元素(其中每個可能是多行)到一個div的中間,也有溢出滾動。我可以通過display:table和display:table-cell垂直對齊多行內容,但這似乎禁用了任何溢出處理。另外,我嘗試過使用行高技巧(將行高設置爲包含div的高度),但垂直對齊似乎不適用於多行內容。在垂直排列的多行元素div與滾動上溢
是否存在純粹的CSS解決方案?
這裏有一個小提琴,說明我想要實現:
http://jsfiddle.net/arxoq7oq/1/(更新)
這裏是我的html:
<body>
<p>Goal: Vertically align to middle with scroll upon overflow - Scenarios A and B need to be handled with the same code (unlike currently):</p>
<div class="frame">
Scenario A
<div class="container green">
<div class="item-list1">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
</div>
</div>
</div>
<div class="frame">
Scenario B
<div class="container green">
<div class="item-list2">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
</div>
</div>
</div>
<p>Can achieve vertical alignment to middle, but overflow scroll doesn't work:</p>
<div class="frame">
Scenario A
<div class="container green">
<div class="item-list1">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
</div>
</div>
</div>
<div class="frame">
Scenario B
<div class="container red">
<div class="item-list1">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
</div>
</div>
</div>
<p>Can achieve overflow scroll, but vertical alignment to middle doesn't work:</p>
<div class="frame">
Scenario A
<div class="container red">
<div class="item-list2">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
</div>
</div>
</div>
<div class="frame">
Scenario B
<div class="container green">
<div class="item-list2">
<div class="item">Item 1</div>
<div class="item">Item 2 might wrap to multiple lines</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
</div>
</div>
</div>
</body>
這裏是我的CSS:
body {
margin:0;
padding:0;
font-family:Arial;
font-size:100%;
}
.green {background:chartreuse;}
.red {background:crimson;}
.frame {display:inline-block;}
.container {
display:table;
width:10em;
height:10em;
}
.item-list1 {
display:table-cell;
width:100%;
height:100%;
vertical-align:middle;
overflow-y:auto; /* Does nothing with table-cell*/
}
.item-list2 {
width:100%;
height:100%;
overflow-y:auto;
vertical-align:middle; /* Does nothing without table-cell */
}
.item {
margin:1em;
}
謝謝,這個伎倆! – 2014-10-30 05:49:48