考虑这个标记:
<ul>
<li>
<div id="container">
<button>toggle display</button>
<div>text</div>
<div>text</div>
</div>
</li>
</ul>
假设#container
元素的计算CSS display
值为block
,则列表项标记(项目符号•
)将呈现在内容的第一行旁边(到<button>
)的左侧。
现在,如果#container
的{{1}} CSS属性更改为display
,则列表项标记将显示在最后一行文本旁边。见test case。 (在Chrome 35和Firefox 30中测试过)。
是否可以在这两种情况下将项目标记呈现在同一位置?(最好在使用inline-block
容器呈现的位置)
经过一些摆弄后,项目标记位置似乎受display: block
元素inline-block
的影响。例如,在vertical-align
元素中设置vertical-align: top
会使标记靠近#container
元素的左上角,但标记定位仍然存在差异{{ 1}}属性不适用于inline-block
元素。
是否有解决方案使子弹渲染在完全相同的位置,与vertical-align
的{{1}}属性无关?
我更喜欢仅使用CSS的解决方案,但编辑标记也是可以接受的。
答案 0 :(得分:1)
根据http://www.w3.org/TR/CSS21/visudet.html:
'inline-table'的基线是表格第一行的基线。
“内联块”的基线是正常流程中其最后一个线框的基线,除非它没有流入线框或者其“溢出”属性的计算值不是“可见” ',在这种情况下,基线是底部边缘边缘。
另见这两个演示:
http://www.brunildo.org/test/inline-block.html
http://www.brunildo.org/test/inline-block2.html
似乎block
和inline-table
具有相同的基线。因此,使用inline-table
代替inline-block
可以解决此问题。
答案 1 :(得分:0)
这是一种肮脏的方式:
li {
list-style-type: none;
}
li::before {
content: "\25CF";
margin-left: -20px;
position: absolute; # thanks to DRD
}
答案 2 :(得分:0)
首先让我说,我不明白为什么子弹在内联块内的最后一个块中被归零。但是,如果您将内联块中的块更改为table
,那么这似乎可以解决问题:http://jsfiddle.net/3BYKp/1/。
#container > div {
display: table;
}
答案 3 :(得分:0)
一种可能的解决方案是使用#container
元素包裹inline-block
:
.container-outer {
display: inline-block;
width: 100%;
vertical-align: top;
}
这样,子弹相对于这个新的外部inline-block
元素定位,其显示不会改变,从而达到所需的一致性。
唯一的缺点是子弹与元素的顶部对齐(由于inline-block
显示和vertical-align: top
),而不是第一行内容,因为它与{ {1}}元素,但这几乎不可知。