用CSS实现弧形卡片的三种方式小结

  发布时间:2023-12-05 12:05:52   作者:XboxYan   我要评论
在平时开发中,有时候会碰到“弧形”样式,主要分为“内凹”和“外凸”两种类型,该如何实现呢?或者想一下,有哪些 CSS 属性和“弧形”有关?下面介绍 3 种方式,一起看看吧

在平时开发中,有时候会碰到下面这种“弧形”样式,主要分为“内凹”和“外凸”两种类型,如下

该如何实现呢?或者想一下,有哪些 CSS 属性和“弧形”有关?下面介绍 3 种方式,一起看看吧

一、border-radius

通常情况下,我们用border-radius都是这样

div{
  border-radius: 20px;
}

这样表示 4 个角都是圆角,并且是标准的正圆

其实,border-radius还支持斜杠的写法,比如

div{
  border-radius: 20px / 10px;
}

这表示,圆角是一个x半径为20pxy半径为10px的椭圆,如下

放大来看,其实是这样的

进一步,我们将x半径设置成50%,这样就能得到一个完整的弧形了

div{
  border-radius: 50% / 20px;
}

效果如下

这样就得到了“外凸”的弧形了,是不是很容易?

至于“内凹”弧形,单纯的border-radius表示无能为力,可以看接下来的方式

二、伪元素+border-radius

这个其实大多数同学都能想到的方式,一个矩形和一个椭圆组合起来,不就是一个弧形卡片了吗?原理非常简单

用代码实现就是

div{
  position: relative;
}
div::after{
  content: '';
  position: absolute;
  width: 100%;
  height: 20px;
  border-radius: 100%;
  background: inherit; /* 继承父级背景 */
  bottom: 0;
  left: 50%;
  transform: translate(-50%,50%);
}

效果如下(虚线表示伪元素的边缘)

用伪元素的好处是,可以随意控制弧度的大小位置,这个是border-radius所不能比的

通过overflow:hidden裁剪多余部分,可以得到一个边缘比较“锋利”的弧形,如下所示

另外,用伪元素还能实现“内凹”的效果,不过这需要反过来思考,什么意思呢?之前是给伪元素加的背景,现在需要加在伪元素的外围,这里用box-shadow实现,原理如下

用代码实现就是

div{
  background: none;
  overflow: hidden;
}
div::after{
  content: '';
  background: none;
  box-shadow: 0 0 0 9999vh #FFE8A3; /*足够大的阴影*/
  z-index: -1;
}

效果如下(虚线表示伪元素的边缘)

三、径向渐变

提到圆弧,还可以想到径向渐变,没错,这里通过径向渐变也能轻易实现弧形卡片效果。

先来看“外凸”的,其实思路和伪元素一样,先拆分,一个椭圆和一个矩形,对应的就是径向渐变(radial-gradient)和线性渐变(linear-gradient),如下

用代码实现就是

div{
  background: 
    radial-gradient(closest-side, #9747FF 100%,transparent 0) center bottom/100% 20px no-repeat,
    linear-gradient(#FFE8A3, #FFE8A3) 0 0/100% calc(100% - 10px) no-repeat;
}

效果如下(紫色部分是径向渐变)

再来看“内凹”的弧形,其实也和伪元素思路类似,只不过这里需要绘制一个足够大的渐变,从透明到纯色的径向渐变,示意如下

调整好渐变中心点,用代码实现就是

div{
  background: radial-gradient(50% 10px at center bottom, transparent 100%,#FFE8A3 0) center bottom;
}

效果如下(全部都是径向渐变绘制)

当然你也可以随意改变径向的弧度和大小,来实现各种不同的效果。

以上所有demo都可以查看以下在线链接

CSS radius layout (codepen.io)

四、优缺点总结

以上就是本文的全部内容了,共介绍了 3 种不同的方式,下面总结一下各自优缺点

  • border-radius 支持斜杠语法,可以单独控制圆弧的x、y半径,实现“外凸”圆弧最简单,缺点是圆弧不能自定义弧度,也不能实现“内凹”效果
  • 伪元素最符合常规思维,可以解决以上问题,缺点是需要占用伪元素,略微麻烦
  • 渐变实现和伪元素拼接思路类似,缺点是语法复杂,需要熟练掌握渐变语法

大家可以根据自己的实际场景自行选择适当的方式,当然最好都能够掌握,这样碰到类似需求时才能游刃有余,如果你有其他的思路,欢迎留言讨论。

以上就是用CSS实现弧形卡片的三种方式小结的详细内容,更多关于CSS实现弧形卡片的资料请关注脚本之家其它相关文章!

相关文章

  • 使用纯CSS实现网页阅读进度条

    为了构建一个阅读进度条,即显示用户向下滚动时阅读文章的进度,很难不考虑 JavaScript,但是,事实证明,您也可以使用纯 CSS 构建阅读进度条,本文小编就给大家介绍如何使
    2023-12-05
  • css实现元素四周阴影的示例代码

    CSS的阴影效果为网页设计增添了许多细节和质感,本文就来介绍一下css实现元素四周阴影的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-04
  • CSS利用浮动实现多个盒子并排

    CSS 中盒子并列是指在同一行或同一列中,将多个盒子按照一定的规则排列在一起的布局方式,本文主要介绍了CSS利用浮动实现多个盒子并排,感兴趣的可以了解一下
    2023-11-29
  • CSS 文字溢出:ellipsis在IE上不起效果的解决

    设置text-overflow: ellipsis;即可实现文本溢出省略的效果,本文主要介绍了CSS 文字溢出:ellipsis在IE上不起效果的解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-23
  • CSS取消移动端长按元素背景色的方法

    在开发微信小程序的时候,发现有的元素长按之后,出现了讨厌人的背景色,这就很奇怪,就想把它去掉,本文给大家介绍CSS取消移动端长按元素背景色的方法,感兴趣的朋友一起
    2023-11-23
  • CSS实现空心尖角的示例代码

    web开发中,三角形指示箭头最为常见,本文就来介绍了CSS实现空心尖角的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-22
  • 新CSS Math方法中rem()和mod()的使用

    CSS 添加了许多新的数学函数来补充旧有的函数(如 calc() 和最近的 clamp() ),本文主要为大家介绍了rem()和mod()的常见用例以及不太常见的用例,感兴趣的小伙伴可以跟随小
    2023-11-22
  • 纯CSS实现炫酷文本时钟特效

    这篇文章主要为大家详细介绍了如何通过纯CSS实现炫酷的文本时钟特效,文中的示例代码讲解详细,对我们掌握CSS有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-21
  • 使用CSS实现多行文本展开收起效果

    这篇文章主要为大家详细介绍了如何使用CSS实现多行文本展开收起效果,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-21
  • css中flexbox和grid的区别小结

    本文我们将深入探讨css中flexbox和grid的布局,通过了解他们的主要差异,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面
    2023-11-20

最新评论