根据附图。我正在尝试制作包含多个项目的<ul>
。但是,我希望前五个项目始终填充视口高度,如果有超过五个项目,我需要其余项目与前五个<li>
的高度相同。
根据图片中的li编号4,可能有一个嵌套的<ul>
可以填充多个<li>
的宽度。
所有<li>
内的文本需要垂直居中并支持多行,同时保持与其他元素相同的高度。
注意:折叠下方的任何其他lis需要与前五个相同的高度。 (即使一开始少于五个元素,它们也不应该填满整个高度。只有当五个元素完成整个页面高度时。
非常感谢任何帮助! 我之前的问题并不完整,我错过了一些解释:Vertically Stretch List Items我正在使用仅限CSS的解决方案(目前),根据需要不起作用。
感谢。
使用的代码:
ul.navigation {
list-style-type: none;
margin: 0;
padding: 0;
display: table;
width: 100%;
height: 100%;
}
ul.navigation li {
display: table-row;
}
ul.navigation li a {
font-size:1.8em;
display: table-cell;
vertical-align: middle;
padding: 1em 1.1em;
text-transform: uppercase;
color: white;
text-decoration: none;
}
答案 0 :(得分:1)
关于高度,一种方法是使用vh
关键字,该关键字是视口高度的1%。它只在IE9中有效,但我猜这是一个移动截图,你应该没问题。
您还应该考虑使用Flexbox,它在移动浏览器中运行良好,它允许您进行垂直居中而不会出现display:table
的所有混乱。
ul{
display:flex;
flex-direction: column;
margin: 0;
padding: 0;
height: 100vh;
border: 1px solid red;
width:24em;
}
li{
display:flex;
flex-direction: row;
justify-content:space-around;
align-items:center;
}
li > div {
flex-grow:1;
flex-shrink:1;
max-width: 50%;
display:flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
li:nth-child(even){
background: gray;
}
ul > li {
height: 20vh;
}
这是一个dabblet: http://result.dabblet.com/gist/78afacb7e747b7e24e62/ba0f81dc9278ec743c58027e995a0f6c381329b8
答案 1 :(得分:0)
也许这样的事情可能会指向你:http://jsfiddle.net/swm53ran/10/
HTML
<div class="container">
<div class="section">My content here</div>
<div class="section">My content here</div>
<div class="section">My content here</div>
<div class="section">
<div class="sub-section">Half Content</div>
<div class="sub-section" style="margin-left:-4px;">Half Content</div> (EDITED)
</div>
<div class="section">My content here</div>
</div>
CSS
.section {
height: 20vh;
background-color: lightgray;
display: block;
}
.sub-section {
width: 50%
display: inline-block;
}
编辑:对hungerstar的见解的新小提琴http://jsfiddle.net/swm53ran/11/赞美
答案 2 :(得分:0)
我选择用js&#39;计算身高。而不是vh。我认为vh更优雅,但如果你需要更多支持,你将不得不使用js。
http://jsbin.com/huroqiliba/1/edit?html,css,js,output
我使用flexbox进行文本和列的垂直居中。 Flexbox在这一点上拥有非常可靠的支持。 http://caniuse.com/#feat=flexbox
答案 3 :(得分:0)
我将在此解决方案中使用vh
和flexbox以避免执行任何js。如果您需要支持较旧的浏览器,请考虑使用一个pollyfill,例如:https://github.com/saabi/vminpoly和https://github.com/doctyper/flexie,它们与Modernizr配合得非常好。
<ul class="navigation">
<li class="one"><a href="#">One</a></li>
<li class="two"><a href="#">Two<br> Overflow: hidden keeps this long li at an equal height, but obviously be smart about this and don't cut off your content with a huge font size or long text.</a></li>
<li class="three"><a href="#">Three</a></li>
<ul>
<li class="four-a"><a href="#">Four and</a></li><li class="four-b"><a href="#">a Half</a></li></ul><li class="five"><a href="#">Five</a></li>
<li class="fold"><a href="#">Fold</a></li>
<li class="fold"><a href="#">Fold</a></li>
<li class="fold"><a href="#">Fold</a></li>
</ul>
ul.navigation, ul.navigation ul {
list-style-type: none;
margin: 0;
padding: 0;
display: block;
width: 100%;
height: 100%;
}
ul.navigation ul li {
display:inline-flex;
width:50%;
}
ul.navigation ul{
display:flex;
}
ul.navigation li a {
font-size:1.8em;
display: block;
padding: 1em 1.1em;
text-transform: uppercase;
color: white;
text-decoration: none;
}
ul.navigation li{
overflow: hidden;
height: 20vh;
display: flex;
align-items: center;
justify-content: center;
}
.one {background-color:lightgray;}
.two {background-color:tomato;}
.three {background-color:palegreen;}
.four-a {background-color:indianred;}
.four-b {background-color:palevioletred;}
.five {background-color:papayawhip;}
.fold{background-color:black;}