【发布时间】:2017-08-09 19:39:42
【问题描述】:
我正在创建一个包含必填字段的表单。为了根据需要标记这些,我将星号 (*) 作为 ::before 元素并将其浮动到右侧,使其位于字段的右上角。
我遇到的问题是其中一些字段使用 CSS 网格定位,当我将 ::before 元素添加到网格时,它被视为另一个网格项并将所有内容推送到新的网格行。
为什么 CSS 网格将 ::before 元素视为另一个网格项?如何使星号像输入元素一样定位?
这是基本的 HTML/CSS:
html {
width: 75%;
}
ul {
list-style: none;
}
input {
width: 100%
}
.grid {
display: grid;
grid-template-columns: .33fr .33fr .33fr;
}
li.required::before {
content: '*';
float: right;
font-size: 15px;
}
<ul>
<li class="required">
<input type="text">
</li>
<li class="grid required">
<p>one</p>
<p>two</p>
<p>three</p>
</li>
<li class="required">
<input type="text">
</li>
</ul>
这是一个小提琴:https://jsfiddle.net/zbqucvt9/
【问题讨论】:
-
伪元素生成与实际元素相同的框。就 CSS 布局而言,伪元素框和实际元素框是两种。在几乎任何其他情况下,您都会发现伪元素框与实际元素框的行为相同。
标签: html css pseudo-element css-grid