如何使用绝对位置作为相对位置?

How to use absolute position as relative?

我有一个 <span>position: absolute。旁边还有一段文字。现在我想要当该跨度的 width 增加时,跨度和文本之间的 space 也会增加。

换句话说,我不想用 Red-Color-Span 覆盖 "MyName" 文本 never。如何?

.notification{
    position: absolute;
    background-color: red;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<span class='inbox'>
    <span class='notification'></span>
    <i class="fa fa-inbox"></i>
    MyName
</span>

<br><br>
<span class='inbox'>
    <span class='notification'>23</span>
    <i class="fa fa-inbox"></i>
    MyName
</span>

<br><br>
<span class='inbox'>
    <span class='notification'>4245</span>
    <i class="fa fa-inbox"></i>
    MyName
    </span>

其实我想要这样的东西:

.notification{
    position: absolute;
    background-color: red;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<span class='inbox'>
    <span class='notification'></span>
    <i class="fa fa-inbox"></i>
    MyName
</span>

<br><br>
<span class='inbox'>
    <span class='notification'>23</span>
    <i class="fa fa-inbox"></i>
    MyName
</span>

<br><br>
<span class='inbox'>
    <span class='notification'>4245</span>
    <i class="fa fa-inbox"></i>&nbsp;&nbsp;&nbsp;&nbsp;
    MyName
</span>

当您使用 absolute 定位时,您会从文档流中删除该元素,这意味着它的 width 将从其他元素中被忽略。您可以使用 position: relative 来定位您的元素,这将允许相邻元素受到其尺寸的影响。 DEMO.

如果您希望 icon 位于数字文本下方 "stacked",但仍不位于 notification 文本之上,那么我将重组您的 html.

包装将堆叠在父元素中的两个元素,div。并将其中一个包含元素定位为 absolute(我会推荐占用较少 width 的元素,在您的示例中是 i 元素)。

在你的例子中,你并不总是有 notification 元素,所以确保在 div 中使用 min-widthmin-height,因为元素其中定位绝对不占用"space."

DEMO

div {
    display: inline-block;
    min-width: 16px;
    min-height: 14px;
    position: relative;
}

.notification {
    background-color: red;
    left: 0;
}

i {
    position: absolute;
    left: 0;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<span class='inbox'>
    <div>
        <i class="fa fa-inbox"></i>
        <span class='notification'></span>
    </div>
    <span class="text">MyName</span>
</span>
<br>
<br>
<span class='inbox'>
 <div>
  <i class="fa fa-inbox"></i>
     <span class='notification'>23</span>
 </div>
 <span class="text">MyName</span>
<br>
<br>
<span class='inbox'>
    <div>
  <i class="fa fa-inbox"></i>
   <span class='notification'>4245</span>
    </div>
    <span class="text">MyName</span>
</span>

诀窍是不要使用绝对定位,只是因为你想隐藏其他东西。还有其他隐藏图标的方法,例如给它一个负的左边距,这将把它放在通知范围下。

.notification {
  background-color: red;
  display: inline-block;
  min-width: 1em;
  position: relative;
}
.notification + i {
  margin-left: -1.25em;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet" />
<span class='inbox'>
  <span class='notification'></span>
  <i class="fa fa-inbox"></i>
  MyName
</span>
<br>
<br>
<span class='inbox'>
  <span class='notification'>23</span>
  <i class="fa fa-inbox"></i>
  MyName
</span>
<br>
<br>
<span class='inbox'>
  <span class='notification'>4245</span>
  <i class="fa fa-inbox"></i>
  MyName
</span>

但是请注意,这取决于图标的 height/width 比率。对于其他图标,您必须同时更改通知的最小宽度和图标的边距。