【发布时间】:2021-03-22 08:06:07
【问题描述】:
我们正在使用 Markdown (Kramdown) 来生成静态网站。对于信息框,我们可以对段落进行注解,得到如下结果:
{:.note .icon-check title="This is a title"}
Lorem, ipsum dolor sit amet consectetur adipisicing elit.
这是转换后的 HTML:
<p class="note icon-check" title="This is a title">
Lorem, ipsum dolor sit amet consectetur adipisicing elit.
</p>
样式是(SCSS):
p.note {
&::before {
float: right;
}
position: relative;
&[title]::after {
content: attr(title);
position: relative;
top: 0;
left: 0;
}
}
.icon::before {
content: "@";
}
由于我们使用的是Icomoon图标字体,其中content设置在:before中,标题必须在:after中。
- 我们不会更改图标字体,所以图标必须留在
:before - markdown 中没有额外的分散注意力的标记,因此没有 HTML 包装器
- 没有Javascript
可以为标题设置绝对定位,但这对于段落文本本身来说太窄了,因为无法设置边距。
现在,如何设置一个带有:after 作为标题在顶部 的框,这在没有设置标题时也很好看?
main {
width: 50%;
display: block;
place-items: center;
margin: auto;
}
p.note {
border: 3px solid red;
border-radius: 3px;
padding: 1em;
position: relative;
}
p.note::before {
margin: auto 0 0.5em 0.5em;
float: right;
}
p.note[title]::after {
content: attr(title);
position: relative;
font-weight: bold;
top: 0;
left: 1em;
}
.icon::before {
font-size: 2em;
content: "@";
}
<html>
<body>
<main>
<p class="note icon" title="This is a title">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolorem quidem non placeat quibusdam velit, dicta adipisci saepe magnam fuga debitis qui, minima, eius error laboriosam distinctio eos natus et!
</p>
</main>
</body>
</html>
【问题讨论】:
-
寻求代码帮助的问题必须包括在问题本身中重现它所需的最短代码,最好是在堆栈片段中。尽管您已经提供了一个链接,但如果它变得无效,那么您的问题对于未来遇到同样问题的其他 SO 用户将毫无价值。见Something in my website/example doesn't work can I just paste a link。
-
试试 grid jsfiddle.net/jrLua3xf 来玩 grid :)
-
@G-Cyrillus 但 @ 没有更多的浮动行为 ;) .. 浮动部分使它有点挑战
-
@TemaniAfif 让它跨越 2 行 jsfiddle.net/hcb7agow/2 ... 或不;)
-
是的,它确实(也可以弯曲)每段文本都被包装到一个虚拟标签中,然后设置在一个单元格中或被浏览器视为单个 flex 子项;)
标签: html css css-position pseudo-element