HTML code:
<div>Foo</div>
<ul>
<li>Bar</li>
</ul>
CSS:
div {
width: 50%;
border: 1px solid blue;
}
ul {
width: 50%;
border: 1px solid green;
}
两个问题:
ul
宽于div
虽然两者都设置为相同的宽度? ul
和div
具有相同的宽度?答案 0 :(得分:4)
因为你需要知道默认的盒子模型是如何工作的。默认情况下,padding
,border
空格被视为元素之外,因此它会累计到您的总元素width
。
图片来源:w3c Box model#Box Dimensions
如果你有一个元素说,100px的宽度,你的边框为2px,边长为20px,那么你的元素总大小将是100 + 4px(每边2px)+ 40px(20px的填充在每一边),总宽度达144px。
你如何解决这个问题?
你需要改变你的盒子模型,
* {
box-sizing: border-box;
}
这件事情的作用是,通过将border-box
设置为box-model
值,它会计算元素内部的padding
和border
而不是外部。因此,元素的总width
保持不变。
请注意
*
会修改所有元素的box-model
,所以你 如果要更改框模型,也可以使用ul
或class
名称 仅限特定元素。
或者你需要重置padding
元素的默认参考#1(我的答案结尾) ul
ul {
padding-left: 0;
}
Demo(请注意,子弹不再存在,所以......)
使用li
margin
ul li {
margin-left: 20px;
}
或者您可以在list-style-position: inside;
元素上使用ul
。
注意:如果有的话,使用
list-style-position
确实有不利之处 多行,这将导致你的子弹下面的换行 所以请继续margin-left
,我可以在这里介绍太多东西 但是我不想偏离我的实际答案。
#1 padding
来自哪里?
每个浏览器都有自己的默认样式表,我们也称之为用户代理样式表。当网页没有定义其他样式时,将应用此样式表。所以每个浏览器都有它自己的风格,可能会有所不同,因此我们使用reset.css
或normalize.css
或一个方便的星级声明来重置样式,如
* {
margin: 0;
padding: 0;
outline: 0;
box-sizing: border-box; /* alters box model */
}
答案 1 :(得分:1)
检查<ul>
和<div>
的方框模型,很明显<ul>
有一个额外的左边填充。此默认填充来自用户代理的默认样式表 - 可能因浏览器而异。
padding: 0
上的<ul>
样式应该修复它。您可能还想考虑使用normalize.css,它可以在各种浏览器中更加一致地呈现所有元素。
<ul>
<div>
div {
width: 50%;
border: 1px solid blue;
}
ul {
padding: 0;
width: 50%;
border: 1px solid green;
}
<div>
Foo
</div>
<ul>
<li>Bar</li>
</ul>
答案 2 :(得分:0)
padding-left
元素有ul
个。ul
移除填充或设置* {box-sizing: border-box;}
div {
width: 50%;
border: 1px solid blue;
}
ul {
width: 50%;
border: 1px solid green;
padding-left: 0;
}
<div>
Foo
</div>
<ul>
<li>Bar</li>
</ul>
* {
box-sizing: border-box;
}
div {
width: 50%;
border: 1px solid blue;
}
ul {
width: 50%;
border: 1px solid green;
}
<div>
Foo
</div>
<ul>
<li>Bar</li>
</ul>
答案 3 :(得分:0)
UL有填充缩进它。如果在UL上将填充设置为0,则它们的宽度都相同。
这是另一篇文章,详细解释了如何修复它