【问题标题】:Use pseudo elements to push the content to left, right, top, or bottom of the element in CSS在 CSS 中使用伪元素将内容推送到元素的左侧、右侧、顶部或底部
【发布时间】:2020-06-06 21:56:25
【问题描述】:

有没有办法使用伪元素将元素的内容向右推,得到下图中的结果?

现在,这是 html 代码:

<div class="center" style="background-color: cyan;">
    <div class="outside-right">
        Content
    </div>
</div>

这些是 CSS 类:

.center {
    position: absolute;
    top:50%;
    left:50%;
    transform: translate(-50%, -50%);
}
.outside-right{
    transform: translateX(100%);
}

问题在于 CSS 动画在更改元素的 transform 属性时,它会覆盖类 .outside-right transform 并且元素会在开始动画之前快速回到其父级的中心。

所以我尝试更改.outside-right 类,将::before 伪元素与width:100% 放在一起,以便推送该元素的内容。但似乎没有什么可以让它发挥作用。 我试过了:

CSS:

.outside-right-using-pseudo-element::before {
    content: '';
    display: inline-block;
    background-color: red;
    width: 100%;
}

还有

.outside-right-using-pseudo-element::before {
    content: '';
    float: left;
    background-color: red;
    width: 100%;
}

HTML

<div class="center" style="background-color: cyan;">
    <div class="outside-right-using-pseudo-element">
        Content
    </div>
</div>

有什么方法可以让它工作吗?

【问题讨论】:

  • 使用 jsfiddle 或 codepen 之类的代码测试器快速进行更改并立即查看结果
  • @TemaniAfif 它也不起作用。此外,推送的内容需要位于其容器的边缘,因此宽度必须是相对的。

标签: html css css-animations pseudo-element web-frontend


【解决方案1】:

你差不多好了,添加white-space:nowrap;以避免在下一行出现元素:

.outside-right-using-pseudo-element {
  white-space: nowrap;
}

.outside-right-using-pseudo-element::before {
  content: '';
  display: inline-block;
  background-color: red;
  width: 100%;
  transition: 1s;
}

.outside-right-using-pseudo-element:hover::before {
  width: 0%;
}

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class="center" style="background-color: cyan;">
  <div class="outside-right-using-pseudo-element">
    Content
  </div>
</div>

另一个使用 flexbox 的想法:

.outside-right-using-pseudo-element {
  display: flex;
  white-space:nowrap;
}

.outside-right-using-pseudo-element::before {
  content: '';
  background-color: red;
  width: 100%;
  flex-shrink: 0; /* this will do the trick */
  align-self: flex-start;
  transition: 1s;
}

.outside-right-using-pseudo-element:hover::before {
  width: 0%;
}

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class="center" style="background-color: cyan;">
  <div class="outside-right-using-pseudo-element">
    Content
  </div>
</div>

你可以很容易地找到另一个方向:

.outside-right-using-pseudo-element,
.outside-left-using-pseudo-element{
  display: flex;
  white-space:nowrap;
}

.outside-left-using-pseudo-element,
.outside-bottom-using-pseudo-element{
  justify-content:flex-end;
}

.outside-right-using-pseudo-element::before,
.outside-left-using-pseudo-element::after{
  content: '';
  background-color: red;
  width: 100%;
  flex-shrink: 0; /* this will do the trick */
  align-self: flex-start;
  transition: 1s;
}

.outside-right-using-pseudo-element:hover::before,
.outside-left-using-pseudo-element:hover::after {
  width: 0%;
}

.center {
  display:table;
  margin:80px auto;
}
<div class="center" style="background-color: cyan;">
  <div class="outside-left-using-pseudo-element">
    Content
  </div>
</div>
<div class="center" style="background-color: cyan;">
  <div class="outside-right-using-pseudo-element">
    Content content
  </div>
</div>

【讨论】:

  • 谢谢。但是第一个代码(不是 flexbox)在单词“Content”和青色框之间引入了一点边距,可能是由于 conten: '' 中的空字符串被解释为空白。我们不能只是将伪元素浮动到左边,所以它将内容推到右边,并消除那个边距吗?
  • @user13695921 我们不能使用浮动,它会将内容向下推送而不是向右推送。您可以在没有空白问题的情况下使用 flexbox 方法
  • flexbox也可以用来将内容推送到右侧、顶部或底部吗?
  • @user13695921 是的,我添加了正确的选项 ;) 也会更新顶部和底部
  • 谢谢。 flexbox解决方案如果也可以应用于顶部和底部,效果很好
【解决方案2】:

        .outside-right-using-pseudo-element {
          position:relative;
          padding-left:110px
          
        }
        .outside-right-using-pseudo-element:before{
            content: '';
            position: absolute;
            width: 100px;
            left: 0;
            height: 100%;
            background: cyan;
          
        } 
 
    <div class="center">
        <div class="outside-right-using-pseudo-element">
            Content
        </div>
    </div>

 
 
     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2021-06-14
    • 2012-05-02
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多