如何将CSS ::before伪元素像网格一样排列

4

有没有一种纯使用CSS的方法,可以将多行元素(例如锚点)对齐,以便“before”部分和“anchor”部分呈现为网格中的并排状态。

也就是说,

>   我是一个测试链接
    可以跨越
    多行

相对于以下结果(希望能够显示它在before内容下换行)。

a::before {
  content: ">";
  padding-right: 20px;
}

div {
  width: 150px;
}
<div>
   <a href="#">i am a test link which goes over multiple lines</a>
</div>

3个回答

10

display:table/table-cell 的效果非常好。

a::before {
  content: ">";
  padding-right: 20px;
}
div {
  width: 150px;
  margin: 1em;
  border: 1px solid grey;
}

/* relevant stuff */
a {
  display: table;
  text-decoration: none;
}
a::before {
  display: table-cell;
  vertical-align: middle;
}
<div>
  <a href="#">i am a test link which goes over multiple lines</a>
</div>

或者受Nenad Vracar原始答案的启发,使用Flexbox。

a::before {
  content: ">";
  padding-right: 20px;
}
div {
  width: 150px;
  border: 1px solid grey;
  margin: 1em;
}

/* relevant stuff */
a {
  display: flex;
  align-items: center;
  text-decoration: none;
}
<div>
  <a href="#">i am a test link which goes over multiple lines</a>
</div>


太棒了 - 谢谢。我尝试过table-cell,但是忘记在父元素上加上display table了。这是初学者的错误! - Jonny

3

您可以像这样使用Flexbox,还可以垂直对齐项目。

演示

div {
  width: 150px;
}

a {
  display: flex;
  flex-direction: row;
  align-items: center;
}

a:before {
  content: ">";
  margin: 5px;
}

<div>
   <a href="#">i am a test link which goes over multiple lines</a>
</div>

2
一种方法是在父级锚元素上添加padding-left值,接着加上display: inline-block/position: relative。然后相对于父元素绝对定位伪元素:

a {
  position: relative;
  padding-left: 20px;
  display: inline-block;
}
a::before {
  content: ">";
  position: absolute;
  left: 0;
}

div {
  width: 150px;
}
<div>
   <a href="#">i am a test link which goes over multiple lines</a>
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接