【发布时间】:2014-09-19 09:57:19
【问题描述】:
我偶然发现了一个我认为一定是错误的问题,但它发生在所有主流浏览器中,甚至是移动浏览器。
基本上,我没有使用默认的 li 项目符号,而是使用具有以下样式的 :before 伪元素:
ul li {
margin: 0 0 0 30px;
}
ul li:before {
content: "\25cf";
font-family: "FontAwesome";
color: #969696;
font-size: 8px;
margin: 0 10px 0 -20px;
right: auto;
font-weight: normal;
font-style: normal;
text-decoration: none;
display: inline-block;
position: relative;
top: -3px;
}
这应该将 li 标签的内容缩进 30px 并将项目符号字符放置在边距中间的某个位置。我发现了一个例子,其中 li 内容的第一行实际上稍微侵入了边缘。观察以下截图:
现在看看原始标记:
这 4 个项目符号的标记结构几乎相同。我们有完全包裹内容的开始和结束 li 标签。我们已经在整个页面中充分验证了 HTML。断开的 li 标签和普通标签之间的唯一区别是正常的 li 标签和内容之间有一个换行符。就是这样。
这是怎么回事?
这里是对这个确切场景的总结:http://jsfiddle.net/9b2929oc/2/
【问题讨论】:
-
有趣。有没有可能把它变成小提琴?
-
我同意这很奇怪。特别是随着空白区域的变化行为。从 :before 伪元素中删除 'display:inline-block' 有什么影响?
-
是的,我刚刚把它弄好了。完全按照我的描述工作:jsfiddle.net/9b2929oc/2
-
@dsclose 删除内联块实际上似乎没有任何影响。我相信它可以补偿任何 CSS 重置脚本。
-
@develdevil 看起来这是由于某些
<li>s 开头的换行符被折叠成一个但仍然呈现的空格字符(根据您的小提琴)。跨度>
标签: html css css-position