微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – 伪元素,就像CSS网格中的网格项一样

我正在创建一个包含必填字段的表单.要根据需要标记这些,我将星号(*)作为:: 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/

解决方法

伪元素被认为是网格容器中的子元素( just like in a flex container).因此,它们具有网格项的特征.

您始终可以使用绝对定位从文档流中删除网格项.然后使用CSS偏移属性(左,右,上,下)移动它们.

这是一个基本的例子:

html {
  width: 75%;
}

ul {
  list-style: none;
}

input {
  width: 100%
}

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
}

li {
  position: relative;
}

li.required::after {
  content: '*';
  font-size: 15px;
  color: red;
  position: absolute;
  right: -15px;
  top: -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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐