首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将伪元素(之前)与所选元素水平对齐

如何将伪元素(之前)与所选元素水平对齐
EN

Stack Overflow用户
提问于 2021-08-31 04:35:23
回答 1查看 50关注 0票数 0

我在将::before CSS伪元素与所选元素对齐时遇到问题。所选元素和伪元素都是文本。有时它会对齐,但如果浏览器破坏了所选元素,它将不会正确对齐。下面是我的代码:

代码语言:javascript
复制
p {
  width: 300px;
  line-height: 5em;
}

span {
  border-bottom: solid 16px;
}

span::before {
  position: absolute;
  content: attr(data-label);
  font-size: 14px;
}

.level-1 {
  padding-bottom: 0px;
}

.level-2 {
  padding-bottom: 16px;
}

.level-3 {
  padding-bottom: 32px;
}

.level-1::before {
  margin-top: 16px;
}

.level-2::before {
  margin-top: 32px;
}

.level-3::before {
  margin-top: 48px;
}

span[data-uid="001"] { border-color: #F9CC88; }
span[data-uid="002"] { border-color: #FEB396; }
span[data-uid="003"] { border-color: #AED4D5; }
代码语言:javascript
复制
<p>
Lorem <span class="level-1" data-uid="003" data-label="Level1">ipsum dolor <span class="level-2" data-uid="001" data-label="Level2">sit amet, <span class="level-3" data-uid="002" data-label="Level3">consectetuer adipiscing</span> elit.</span></span>
</p>

期望值:

实际:

为什么会发生这种情况,如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 07:51:44

一种绕过它的方法是在之后而不是之前生成伪元素。这似乎让浏览器意识到它不应该溢出文本,而是从下一行开始,就像它自己的元素一样。

此外,通过设置跨度的位置并调整生成的垂直对齐,使伪元素相对于其跨度定位。

(注意:我添加了更多的文本,以便显示问题)。

代码语言:javascript
复制
p {
  width: 300px;
  line-height: 5em;
}

span {
  border-bottom: solid 16px;
}

span::after {
  position: absolute;
  content: attr(data-label);
  font-size: 14px;
  left: 0;
  top: -32px;
}

.level-1 {
  padding-bottom: 0px;
}

.level-2 {
  padding-bottom: 16px;
}

.level-3 {
  padding-bottom: 32px;
}

.level-1::after {
  margin-top: 16px;
}

.level-2::after {
  margin-top: 32px;
}

.level-3::after {
  margin-top: 48px;
}

span[data-uid="001"] {
  border-color: #F9CC88;
}

span[data-uid="002"] {
  border-color: #FEB396;
}

span[data-uid="003"] {
  border-color: #AED4D5;
}

span {
  position: relative;
}
代码语言:javascript
复制
<p>
  Lorem <span class="level-1" data-uid="003" data-label="Level1">ipsum dolor <span class="level-2" data-uid="001" data-label="Level2">sit amet, more text <span class="level-3" data-uid="002" data-label="Level3">consectetuer adipiscing</span> elit.</span>
  </span>
</p>

在Windows10 (Edge/Chrome和Firefox)和IOS 14.7.1 (Safari)上测试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68992934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档