因为题解页的pre code 标签,比较单调,一直有想把这个标签模拟成 macos 的菜单栏的想法。

最早想使用 三个 span 标签或 行内块元素着色来实现,后来在网上看到一种极简的实现思路:

用了伪类和box-shadow来实现

在我的逻辑中每个元素都有::before 和::after 两个伪元素,可以模拟 2 个按钮,但是第三个按钮就要再添加一个实体元素,或是再套一个元素的 before或after 来排成一排。

pre {
    border-radius: 20px;
    overflow: hidden;
    background-color: #ebedf1;
    line-height: 1.6;
}

pre::before {
    content: "";
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background-color: #fd6458;
    box-shadow: 20px 0 0 #ffbf2b, 40px 0 0 #24cc3d;
    margin: 15px 20px 5px;
}

但上面的代码直接使用before 来绘制红色圆点,使用 box-shadow 偏移 可以实现不限数量的圆点,即每一层阴影都缩小成一个小圆点,依次做相对定位。

真的是妙不可言!!!

image.png