单独的ul
元素中包含的一系列div
元素不仅需要在其:before
伪元素中包含正确的内容,还要将粗体标记标题保留在列表旁边。
此外,如果问题div
中没有列表,则不会出现任何内容。这就是为什么我在寻找CSS作为解决方案的原因,因为如果我在div
中对标题进行硬编码,那么如果没有列表就会出现。
我无法预测这个唯一div
的哪些实例会提前ul
- 我们的应用程序根据用户输入从下拉菜单生成内容,因此如果菜单永远不会使用时,未创建ul
。
我无法使用任何类型的JavaScript进行此标记过程。
这就是喜欢的内容:
Foo Items
列出一个酒吧项目
列出一个目前我正在尝试使用alt
的{{1}}属性填充ul
区域。希望有一种方法来定义CSS,其中“对于包含div:before
类元素的每个div
,将.exam
的{{1}}放入ul
元素“。
这是我尝试过的:
attr(alt)
和CSS一起使用它:
div:before
请在此处查看jsfiddle链接 - https://jsfiddle.net/f6gwyvuu/
我意识到这有点令人费解但不幸的是,这是解决应用程序生成其内容的方式的结果。我实际上无法控制它,我只能对它创建的元素进行风格化。
提前致谢。
答案 0 :(得分:4)
首先,ul
元素不能具有alt
属性。您可以使用自定义data-*
属性。
在每个ul
中重复相同的数据没有多大意义。相反,只将其添加到div
。
然后,您可以使用
div:not(:empty):before {
content: attr(data-alt);
display: block;
}
div:not(:empty):before {
content: attr(data-alt);
display: block;
font-style: italic;
}
ul {
margin: 0 1em;
padding: 0;
}
li {
margin-left: 2em;
}
<div data-alt="Foo Items">
<b>Far</b>
<ul class="exam">
<li>Stuff</li>
<li>Things</li>
</ul>
<b>Near</b>
<ul class="exam">
<li>dunno</li>
</ul>
</div>
<div data-alt="Baz Items"></div>
<div data-alt="Bar Items">
<b>Far</b>
<ul class="exam">
<li>Foo</li>
</ul>
<b>Near</b>
<ul>
<li>bar</li>
<li>eggs</li>
</ul>
</div>
答案 1 :(得分:0)
您可以这样做:
div > .exam:not(:empty):before {
content:attr(alt);
font-style:italic;
}
ul {
margin:0 0 1em 1em;
padding:0;
}
li {
margin-left:2em;
}
如果您尝试更改以前兄弟的样式,则无法使用css。您最好通过添加alt
属性来添加其他属性。最佳做法是添加前缀为data-
的自定义属性。
答案 2 :(得分:0)
如果必须这样做,请尝试
div {position:relative;} /*let this be the absolute container*/
div > .exam {position: static;}
div:not(:empty) {padding-top: 30px;} /*for div with generated content, only works for short titles*/
div > .exam:first-of-type:before {
content:attr(alt);
font-style:italic;
position: absolute;
top: 0;
margin-left: -1em; /*compensate your ul margin*/
}
ul {
margin:0 0 1em 1em;
padding:0;
}
li {
margin-left:2em;
}
这适用于短片,但也可以调整它以适用于长片。