圆角,相信每一个了解CSS属性的都知道,通过border-radius实现圆角(外凸圆角),但是如果需要实现内凹圆角怎么办呢?比如四角内凹的元素,比如如下所示这样的内凹圆角

对于这种问题,很多人的反应都是采用CSS的伪类或者子元素的绝对定位来覆盖,但是这样做的后果就是被覆盖部分是不透明的。在不同样色的背景下,会出现非常突兀的覆盖元素,这样一来,视觉上将会非常难看,自适应行不强。

如果需要实现透明的效果,很多人又会说,切图!对,切图作为background-image是一个很好的解决方法。如果只能使用CSS属性来实现,是不是就懵逼了。。。

下边就来介绍一种使用纯CSS实现这种背景透明的内凹圆角效果

首先先介绍两个CSS3的属性

  • 线性渐变 linear-gradient()

    从该属性名中可以看出,这是一个生成颜色渐变图片的CSS方法。根据渐变基准方向(Gradient line)和颜色点,其中变化颜色点可以有多个。

    示例:

      // 两种颜色渐变
    background: linear-gradient(90deg, #F6327C, #DF3DF0); // 两种以上颜色渐变,三个颜色点,在50%处有颜色#FF0,剩余的两个分别是起始点和结束点
    background: linear-gradient(90deg, #F6327C, #FF0 50%, #DF3DF0);

渐变基准方向若使用 to left/to right/to top/to bottom 这样属性时,注意-webkit-等内核兼容性方面的语法的变化,细节可以查看文档

  • 径向渐变 radial-gradient()

    顾名思义,从文字可以明白所谓的径向渐变就是以某点为圆心,固定直径内颜色渐变。它的属性包含了起始位置、方向、颜色渐变梯度,径向梯度允许变化的形状和大小。详细内容可以查看文档

    其语法为:

      radial-gradient([[ circle || <length>] [at <position> ]?, | [ ellipse || [ <length> | <percentage> ]{2} [ at <position> ]?, | [ [ circle | ellipse] || <extent-keyword> ] [at <position> ]?, | at <position> ,]? <color-stop> [, <color-stop>] +)
    where <extent-keyword> = closest-corner | closest-side | farthest-corner | farthest-side and <color-stop> = <color> [ <percentage> | <length> ]?

    示例:

      // 椭圆渐变
    background-image: radial-gradient(ellipse farthest-corner at 45px 45px , #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%); // 固定半径的圆渐变
    background-image: radial-gradient(16px at 60px 50% , #000000 0%, #000000 14px, rgba(0, 0, 0, 0.3) 18px, rgba(0, 0, 0, 0) 19px);

言归正传,回到内凹圆角

首先主元素左右两边留有固定大小的margin值,然后使用圆角元素覆盖对应的margin区域。若圆角元素不大于2个,可以使用::after::before两个伪类元素。若大于4个,如四角内凹元素,则采用自元素的绝对定位方式。

DOM元素结构(采用伪类):

<div class="main"></div>

CSS结构分以下2个方面来进行设计:

  1. 主体元素(背景颜色渐变)

     .main {
    position: relative;
    width: 200px;
    height: 40px;
    margin: 0 5px;
    background: -webkit-linear-gradient(left, #F6327C, #DF3DF0);
    background: linear-gradient(to right, #F6327C, #DF3DF0);
    }
  2. 内凹圆角元素(使用伪类)

     .main::before {
    position: absolute;
    content: "";
    display: block;
    position: absolute;
    top: 0;
    left: -5px;
    width: 5px;
    height: 40px;
    border-radius: 2px 0 0 2px;
    background: -webkit-radial-gradient(10px at left,transparent 50%,#F6327C 50%);
    background: radial-gradient(10px at left,transparent 50%,#F6327C 50%);
    }
    .main::after {
    position: absolute;
    content: "";
    display: block;
    position: absolute;
    top: 0;
    right: -5px;
    width: 5px;
    height: 40px;
    border-radius: 0 2px 2px 0;
    background: -webkit-radial-gradient(10px at right,transparent 50%,#F6327C 50%);
    background: radial-gradient(10px at right,transparent 50%,#F6327C 50%);
    }

根据以上代码就能够实现如图所示的带透明内凹圆角效果。

CSS布局技巧 -- 内凹圆角的更多相关文章

  1. CSS实现多重边框和内凹圆角

    CSS实现多重边框 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...

  2. css边框内凹圆角,解决优惠券的边框问题

    关于css边框内凹圆角,找了好久才找到的 <html <head> <title>无标题页</title> <style> body{ backg ...

  3. div+css 布局技巧总计

    一.css 样式 1.float 首先需要了解块级元素(block element).每个块级元素都默认占用一行,在同一行只能添加一个块元素(float 除外).块级元素一般可以嵌套块级元素或者行内元 ...

  4. CSS-论css如何纯代码实现内凹圆角

    background-image: radial-gradient(200px at 50px 0px, #fff 50px, #4169E1 50px); 这是做内凹圆角的核心代码,就是背景图的ra ...

  5. css布局技巧

    CSS用户界面样式 鼠标样式currsor li{ cursor:pointer: } 设置或检索在对象上移动鼠标指针采用何种系统预定义的光标形状 属性值 描述 default 默认 pointer ...

  6. CSS布局技巧之——各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  7. HTML+CSS布局技巧及兼容问题【阅读季】

    在IE6和IE7中,行高值必须大于字体的2px以上才能保证字体的完整显示或当作为链接时能显示下划线. IE6 下去掉 input等元素 的边框 border: 0 none; 所有浏览器都可以了 边框 ...

  8. Html和CSS布局技巧

    单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的 ...

  9. 史上最全Html与CSS布局技巧

    单列布局水平居中水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父 ...

随机推荐

  1. 使用python的redis 实现消息的pub/sub功能

    直接上代码: 首先需要明确的是,客户端向服务端去发送消息,服务端只需要订阅是哪些各频道即可,然后客户端向这些个频道发送消息 在客户端的代码: #!/usr/bin/env python #coding ...

  2. ---Java 678

    sudo add-apt-repository ppa:webupd8team/java sudo apt-get update udo apt-key adv --recv-key --keyser ...

  3. XidianOJ 1044 炸金花

    题目描述 炸金花是一个风靡全球的扑克游戏,不少人因为这个游戏发了家,而更多的人则输得倾家荡产.为了帮助赌徒们戒掉它,现在决定派你去写一个程序,帮助赌徒们更好的认识这个游戏. 炸金花在这里被简化成这样一 ...

  4. {Reship}{原文}{资治通鉴}

    this article came from here ================================================= 资治通鉴 (361人评分) 9.0   作者 ...

  5. datasnap的初步 生命期LifeCycle

    datasnap的初步 生命期LifeCycle   TDSServerClass有一个属性LifeCycle,这个属性有三个值,很好理解1.Session,这是默认值.就是一个连接,一个Sessio ...

  6. java单例模式

    单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点.   使用场景:在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现"不良反映" ...

  7. NPOI Helper文档

    public class ExcelHelper { /// <summary> /// NPOI Excel转DataTable /// </summary> /// < ...

  8. 实现android手机来电拦截系统页面弹出自定义页面特效

    如何实现android手机来电拦截系统页面弹出自定义页面特效, 首先:    我们需要注册一个监听来电的广播PhoneStateReceiver 类:其次:    在onReceive里面我们获取an ...

  9. VFP不同句柄 同一事务处理 统一提交或回滚

    SQLSetprop(m.lnAccHandle,[Transactions],2)SQLSetprop(m.lnSetHandle,[Transactions],2) SQLSetprop(m.ln ...

  10. 大毕设-MATLAB-常用知识回顾

    要用到FIR滤波器和抽样器下面研究这两个的Matlab实现: Fir滤波器: matlab上fir滤波器的关键字是fir1 在command窗口输入help fir1出现帮助文档: >> ...