:after,:before的绝对定位问题

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .reply {
        position: relative;
        width: 200px;
        height: 80px;
        border: 1px solid rgba(243, 237, 127, 0.68);
        border-radius: 5px;
        background-color: rgba(243, 237, 127, 0.35);
    }
    
    .reply:after {
        content: '';
        width: 0px;
        height: 0px;
        border-color: transparent transparent rgba(243, 237, 127, 0.35) transparent;
        border-style: solid;
        border-width: 6px;
        position: absolute;
        top: -11px;
        border-radius: 3px;
        left: 18px;
        right: auto;
    }
    
    .reply:before {
        content: '';
        width: 0px;
        height: 0px;
        border-color: transparent transparent rgba(243, 237, 127, 0.68) transparent;
        border-style: solid;
        border-width: 7px;
        position: absolute;
        top: -14px;
        border-radius: 3px;
        left: 17px;
        right: auto;
    }
    </style>
</head>

<body>
    <div class="reply"></div>
</body>

</html>

实现简单的聊天气泡(如下图),我的问题是两个伪类中top和left的值应该如何设置呢?
图片描述

阅读 12.5k
2 个回答
border-color: transparent transparent rgba(243, 237, 127, 0.68) transparent;
border-style: solid;
border-width: 7px;

这句理解了就好了,这句话的意思是4个三角形合成1个正方形,其中另外3个三角形是transparent透明的,只有下一个显示。原始位置在父元素左上角

伪类元素的原始位置一般来说是在父元素的坐上和右下,如果设置成display:block的话会另起新行。top和left就像一般的定位那样设置就可以了啊 往上移动top>0,往右left>0,且都是越大越远。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题