[英]Full clickable area and vertical alignment of block element inside a table-cell
有一个简单的问题,我需要一个表格单元内的显示块元素来获取单元格的全部可用高度和宽度,同时文本也要垂直对齐。
ul { background: yellow; display: table; table-layout: fixed; width: 100%; } li { display: table-cell; text-align: center; vertical-align: middle; height: 48px; } a { display: block; width: 100%; height: 48px; } a:hover { background: red }
<ul> <li> <a href="#">Item1</a> </li> <li> <a href="#">Item2</a> </li> <li> <a href="#">Item3</a> </li> <li> <a href="#">Item4</a> </li> <li> <a href="#">Item5</a> </li> </ul>
一切都需要响应,因此如果文本下降到2行并且列表元素的数量很灵活,则行高不会固定,这就是我使用display:table
的原因。 但是,如果它可以实现,则对另一种方法感到满意,由于某种原因,我无法弄清楚在这种情况下如何垂直对齐文本
使用Flexbox,您可以将其存档:
ul { background: yellow; display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; width: 100%; list-style:none; padding:0; margin:0; align-item:center; } li { text-align: center; vertical-align: middle; /*width:20%;*/ display:flex; flex-direction:column; flex: 1 0 auto; } a { padding:10px 0; display:flex; flex-direction:column; flex: 1 0 auto; justify-content: center; } a:hover { background: red }
<ul> <li> <a href="#">Item1</a> </li> <li> <a href="#">Item2</a> </li> <li> <a href="#">Item3</a> </li> <li> <a href="#" >Item4 with very very long long long text</a> </li> <li> <a href="#" >Item5</a> </li> <li> <a href="#" >Item6</a> </li> <li> <a href="#" >Item7</a> </li> </ul>
您的代码完全正确。但正确的 vertical-align: middle;
仅删除样式 height: 48px;
里面 a
标签
将 li:hover
样式替换为a:hover
更新样式
a {
display: block;
width: 100%;
word-break: break-all;
}
ul { background: yellow; display: table; table-layout: fixed; width: 100%; } li { display: table-cell; text-align: center; vertical-align: middle; height: 48px; } a { display: block; width: 100%; word-break: break-all; } li:hover { background: red }
<ul> <li> <a href="#">Item1</a> </li> <li> <a href="#">Item2 Text isveryveryveryvery longer</a> </li> <li> <a href="#">Item3</a> </li> <li> <a href="#">Item4</a> </li> <li> <a href="#">Item5</a> </li> </ul>
最后,我以这种方式做了,并且可以满足我的要求
演示: http : //codepen.io/anon/pen/RpGPyO
HTML:
<ul>
<li>
<a href="#">Item1</a>
</li>
<li>
<a href="#">Item2 or something longer</a>
</li>
<li>
<a href="#">Item3</a>
</li>
<li>
<a href="#" >Item4</a>
</li>
<li>
<a href="#" >Item5</a>
</li>
</ul>
CSS:
ul {
background: yellow;
display: table;
table-layout: fixed;
width: 100%;
}
li {
display: table-cell;
text-align: center;
vertical-align: middle;
height: 48px;
position: relative;
z-index: 1;
}
a {
display: block;
width: 100%;
}
a:before {
content:'';
display: block;
height: 48px;
position: absolute;
top: 0;
left: 0;
z-index: -1;
width:100%;
}
a:hover:before {
background: red;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.