css 伪类实现弧形

在实现页面五花八门的有特色的ui时,我们有时会遇到要用实现一个弧形,而这样的弧形要怎么实现呢?用图片?不太优雅,这样就要无故多加载一张图片了,这里来说说怎么用css的after伪类来实现弧形。


总思路:

写一个主元素,并给该元素添加伪类来设置成圆,取该圆的一部分来作为我们看到的圆弧。

要点:

  1. 我们看到的圆弧实质是伪元素(圆)的一部分,所以主元素应该是透明的,颜色值设置在伪元素上;
  2. 既然是主元素和伪元素,那么就应该主元素设置相对定位(relative),伪元素设置绝对定位(absolute)于主元素;
  3. 伪元素宽度可以超过主元素,这时最好让伪元素相对于主元素居中,这样展现出来的圆弧才能左右对称;
  4. 如果伪元素宽度超过主元素,需要设置主元素超出隐藏(overflow:hidden),这样才不会出现横向滚动条;
  5. 伪类可以设置成正圆(border-radius: 50%) 也可以是椭圆(border-radius: top right bottom left);
  6. 既然是背景装饰,可以把主元素的层级设置底一些(z-index: -1);

具体实现:

第一种(正圆弧):

<style>
    *{margin: 0;padding: 0;}
    .bg_arc{
        width: 100%;
        height: 400px;
        position: relative;
        z-index: -1;
        overflow: hidden;
        /*background: #ddd;*/
    }
    .bg_arc::after{
        content: '';
        display: block;
        width: 160%;
        height: 200%;
        border-radius: 50%;
        position: absolute;
        left: 50%;
        top: -100%;
        transform: translateX(-50%);
        background: #1677D2;
    }
</style>
<body>
    <div class="bg_arc"></div>
</body>

实现效果:


正圆弧

参照上面的要点,大概也能知道个原理了吧。看到的圆弧高度等于主元素高度,伪元素绝对于主元素定位,左右居中,上移100%;圆弧弧度取决于伪类的宽度,这点放到这里来说,是怕放在上面说反而让人觉得复杂了。
如果还不理解的话,可以把上面不必要的样式注释掉,辅助理解:

<style>
    *{margin: 0;padding: 0;}
    .bg_arc{
        width: 100%;
        height: 400px;
        position: relative;
        /*z-index: -1;*/
        /*overflow: hidden;*/
        background: #ddd;
    }
    .bg_arc::after{
        content: '';
        display: block;
        /*width: 120%;*/
        width: 100%;
        height: 200%;
        border-radius: 50%;
        position: absolute;
        /*left: 50%;*/
        /*top: -100%;*/
        /*transform: translateX(-50%);*/
        background: #1677D2;
    }
</style>
<body>
    <div class="bg_arc"></div>
</body>

效果:


辅助理解

可以多调调高度宽度来帮助理解。

第二种(有角度的弧):

<style>
    *{margin: 0;padding: 0;}
    .bg_arc{
        width: 100%;
        height: 400px;
        position: relative;
        z-index: -1;
        overflow: hidden;
    }
    .bg_arc::after{
        content: '';
        display: block;
        width: 100%;
        height: 400px;
        position: absolute;  /* 不同点1 */
        left: 0;
        top: 0;
        border-radius: 0 0 50% 50%;  /* 不同点2 */
        background: #fcc;
    }
</style>
<body>
    <div class="bg_arc"></div>
</body>

效果图:


角度弧

实现角度弧的思路与正圆弧差不多,不同地方是:
不同点1. 伪元素大小与主元素一样,覆盖在主元素上;
不同点2. 设置伪元素的单个角度;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容