html
结构如下:
css
样式如下:
* { margin: 0; padding: 0; }
nav { width: 300px; margin: 0 auto; background-color: #eee; }
ul { list-style-type: none; width: 300px; }
a { text-decoration: none; color: black; }
.first>li {
display: inline-block;
width: 33%;
}
/*
fixme: 设置为inline-block后, 33%的width,仍旧会超出;
1. inline-flex,inline-table同样会出现类似问题,float后可以完全并排 ?
2. inline-是否有默认的margin或padding ?
<=32% 或 <= 96px 才能并排
todo: 是什么原因让其无法并排的?
*/
问题
: 父元素 ul
的width
为300px
, 将3个子元素li
设置为inline-block
,同时 width
设置为ul
的 33%
, 发现 3个 li
无法并排, 最后一个 li
会被挤下来, 如图:
检查父元素 ul
如下:
子元素 li
如下:
疑问
是不是因为
inline-block
水平方向上有默认的spacing
, 将inline-block
改为其他inline-
方式的也出现类似的问题 ?将
ul
和li
中-webkit-
开头的都设为0
也没用 ?尝试 让 3 个
li
浮动后又解决了这个问题, 这又是为什么 ?
因为使用了
inline-block
之后,li
标签实际上变成了行内元素,这时候li
标签之间的换行符和空格也会被算上宽度,所以会导致溢出。使用float
布局不会出现这种问题,所以不会溢出。解决办法是给
ul
设置font-size:0;
这样li
之间的空格和换行符会不占宽度,li
就可以并排了。或者直接把
li
之间的空格和换行符都删掉也可以。