如何将 ::before 和 ::after 放置在父级上方并彼此相邻

How to position ::before and ::after above parent and next to each other

如何将两个伪元素 ::before::after 放置在父元素之上并彼此相邻?之前和之后都是文本值。它们的颜色和内容不同。

一个完美的解决方案是制作一个 ::before 元素,给它 display:block 以便它确实出现在父元素之上,然后给自己一个 ::after 但这是不可能的在另一个伪元素上定义一个伪元素。

<h1>
    <svg></svg>
    <span> 
      Lorem ipsum, or lipsum as it is sometimes known, is dummy text used in laying 
    </span>
</h1>
span::before{
  content:'Lorem ipsum, or lipsum';
}

span::after{
  content:'.';
  color: red;
}

预期结果为:

Lorem ipsum, or lipsum.

Lorem ipsum, or lipsum as it is sometimes known, is dummy text used in laying

before 的内容通常比 but not always 的内容短。

h1.extra span {
  display: flex;
  flex-wrap: wrap;
  background: gold;
}

h1.extra span::before {
  font-size: 1rem;
  content: attr(data-before);
  order: -1;
}

h1.extra span::after {
  font-size: 1rem;
  content: attr(data-after);
  order: -1;
  color: red;
  flex-basis: 50%;
  flex-grow: 1;
}
<h1 class="extra">
  <svg></svg>
  <span data-before="Lorem ipsum, or lipsum" data-after="..."> 
  Lorem ipsum, or lipsum as it is sometimes known, is dummy text used in laying 
</span>
</h1>

不可能将 ::before 和 ::after 的样式设置为彼此相邻并独立于 3 个元素的大小而位于其父元素之上。 我在DOM结构中引入了一个新元素:

        <h1 class="title">
            <span class="title__main" :data-before="mainTitle" :data-after="."></span>
            <span class="title__sub">{{subTitle}}</span>
        </h1>

现在定位所有内容变得容易多了。