当我注意到一个我无法解释的例子时,我正在看一些列表的例子。这是我正在查看http://css.maxdesign.com.au/listamatic/horizontal05.htm的网站,这是来自它的代码:
<div id="navcontainer">
<ul id="navlist">
<li id="active"><a href="#" id="current">Item one</a></li>
<li><a href="#">Item two</a></li>
<li><a href="#">Item three</a></li>
<li><a href="#">Item four</a></li>
<li><a href="#">Item five</a></li>
</ul>
</div>
#navlist {
padding: 3px 0;
margin-left: 0;
border-bottom: 1px solid #778;
font: bold 12px Verdana, sans-serif;
}
#navlist li {
list-style: none;
margin: 0;
display: inline;
}
#navlist li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #778;
border-bottom: none;
background: #DDE;
text-decoration: none;
}
#navlist li a:link {
color: #448;
}
#navlist li a:visited {
color: #667;
}
#navlist li a:hover {
color: #000;
background: #AAE;
border-color: #227;
}
#navlist li a#current {
background: white;
border-bottom: 1px solid white;
}
我没有得到的是将父#navlist元素的填充设置为3px,而仍然列表项直接放置到其边框,就像它的填充为0px一样。当我设置以下内容时:
#navlist {
padding: 0;
}
列表项的边框位于#navlist元素的边框下方。那为什么不应该比#navlist边界高出1px?我找不到解释这种行为的规则?
答案 0 :(得分:2)
垂直填充对内联元素的工作方式不同。考虑这个例子:
青色区域表示父元素,而黄色区域表示带填充的块/内联元素。请注意,内联元素的顶部和底部填充不会影响父级的高度;如有必要,它会在父母之外呈现。
现在,这是Eric Meyer的标签导航栏示例的细分:
如上所述,垂直填充不会使线框向下移动,而是填充在有意添加 的3px填充上方划线。结果是像素完美标签菜单。
答案 1 :(得分:1)
我认为就是这样:<li>
元素和包含的<a>
元素都是内联元素。因此,它们排列在<ul>
容器的基线,该容器位于<ul>
顶部下方的16个像素加3个填充像素内。 (我认为基线距离底部可能有2个像素,但很难说清楚。)<a>
标签也是16像素高,因此它们恰好排列在{{16个像素上方。 1}}。因此,<ul>
的顶部和底部填充的3个像素恰好在<a>
的可用空间上排列。
基本上它归结为内联元素的工作方式。如果您将<ul>
元素设为<a>
而不是inline-block
,则会看到填充不再重叠。 You can read the W3C material about it here.