zoukankan      html  css  js  c++  java
  • CSS奇思妙想图形(心形、气泡三角形、切角、梯形、饼图等)

     今天看到一篇不错文章,在原来CSS3图形创建基础上扩展了很多。

    这里记录总结下

    心形

    原理:利用 圆形 和 正方形实现

    HTML:

    <div class="heartShaped">
        <h1>heartShaped</h1>
    </div>

    CSS:

    .heartShaped {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%) rotate(45deg);
        background: rgba(255, 20, 147, .85);
        width: 140px;
        line-height: 140px;
        text-align: center;
        color: white;
        font-size: 12px;
    }
    
    .heartShaped:before, .heartShaped:after {
        content: '';
        position: absolute;
        top: 0;
        left: -70px;
        width: 140px;
        height: 140px;
        border-radius: 50%;
        background: rgb(255, 20, 147);
        z-index: -1;
    }
    
    .heartShaped:after {
        top: -70px;
        left: 0;
    }

    气泡三角形

    原理:利用 border 的 transparent 特性实现

     HTML:

    <div class="bubbly">
        <p>heartShaped</p>
    </div>

    CSS:

    .bubbly {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: #00aabb;
        border-radius: .4em;
        width: 260px;
        padding: 60px 20px;
        text-align: center;
        color: white;
        font-size: 200%;
    }
    
    .bubbly:after {
        content: '';
        position: absolute;
        bottom: 0;
        left: 50%;
        border: 34px solid transparent;
        border-top-color: #00aabb;
        border-bottom: 0;
        border-left: 0;
        margin: 0 0 -34px -17px;
    }
     

    切角

    原理:使用线性渐变实现

    HTML:

    <div class="notching">
        <p>heartShaped</p>
    </div>

    CSS:

    .notching {
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                 160px;
                padding: 60px 20px;
                text-align: center;
                color: white;
                font-size: 200%;
            }
    
            .notching {
                background: linear-gradient(135deg, transparent 15px, deeppink 0) top left, linear-gradient(-135deg, transparent 15px, deeppink 0) top right, linear-gradient(-45deg, transparent 15px, deeppink 0) bottom right, linear-gradient(45deg, transparent 15px, deeppink 0) bottom left;
                background-size: 50% 50%;
                background-repeat: no-repeat;
            }

    弧形切角

    原理:使用径向渐变实现

    HTML:

    <div class="arc">
        <p>arc</p>
    </div>

    CSS:

    .arc {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
         60px;
        padding: 60px;
        text-align: center;
        color: white;
        font-size: 200%;
    }
    
    .arc {
        background: radial-gradient(circle at top left, transparent 15px, yellowgreen 0) top left, radial-gradient(circle at top right, transparent 15px, yellowgreen 0) top right, radial-gradient(circle at bottom right, transparent 15px, yellowgreen 0) bottom right, radial-gradient(circle at bottom left, transparent 15px, yellowgreen 0) bottom left;
        background-size: 50% 50%;
        background-repeat: no-repeat;
    }

    单个颜色实现 hover 和 active 时的明暗变化效果

    原理:利用伪类及透明度实现

    HTML:

    <div class="pesudo">
        <p>pesudo</p>
    </div>

    CSS:

    .pesudo {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 120px;
        padding: 60px;
        text-align: center;
        color: white;
        font-size: 200%;
        border-radius: 1em;
        background: #00aabb;
        cursor: pointer;
    }
    
    .pesudo:before {
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        z-index: -1;
        border-radius: 1em;
        background: rgba(0, 0, 0, .1);
    }
    
    .pesudo:hover:before {
        content: "";
    }
    
    .pesudo:after {
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        z-index: -1;
        border-radius: 1em;
        background: rgba(255, 255, 255, .2);
    }
    
    .pesudo:active:after {
        content: "";
    }

    梯形

    原理:利用伪类加旋转透视实现

    HTML:

    <div class="trapezoid">
        <p>trapezoid</p>
    </div>

    CSS

    .trapezoid {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 160px;
        padding: 60px;
        text-align: center;
        color: white;
        font-size: 200%;
    }
    
    .trapezoid:before {
        content: "";
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        transform: perspective(40px) scaleY(1.3) rotateX(5deg);
        transform-origin: bottom;
        background: deeppink;
        z-index: -1;
    }

    饼图

    原理:利用伪类、线性渐变、旋转实现

    HTML:

    <div class="pie">
        <p>pie</p>
    </div>

    CSS

    .pie {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
         200px;
        line-height: 200px;
        border-radius: 50%;
        text-align: center;
        color: white;
        font-size: 200%;
        background-color: yellowgreen;
        overflow: hidden;
        background-image: linear-gradient(to right, transparent 50%, #655 0);
        cursor: pointer;
    }
    
    .pie:before {
        content: "";
        position: absolute;
        top: 0;
        left: 50%;
         50%;
        height: 100%;
        background-color: inherit;
        transform-origin: left;
        z-index: -1;
        transform: rotate(.1turn);
    }
    
    .pie:hover:before {
        transition: all 1s;
        transform: rotate(.45turn);
    }

    平行四边形

    原理:利用伪类、拉伸实现

    HTML:

    <div class="parallelogram">
        <p>parallelogram</p>
    </div>

    CSS

    .parallelogram {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 280px;
        line-height: 150px;
        text-align: center;
        color: white;
        font-size: 200%;
    }
    
    .parallelogram:before {
        content: '';
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background-color: #00aabb;
        z-index: -1;
        transform: skew(.08turn);
    }

    菱形

    原理:利用伪类、旋转实现

    HTML:

    <div class="diamond">
        <p>diamond</p>
    </div>

    CSS

    .diamond {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 200px;
        line-height: 200px;
        text-align: center;
        color: white;
        font-size: 200%;
    }
    
    .diamond:before {
        content: '';
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background-color: deeppink;
        z-index: -1;
        transform: rotateZ(45deg);
    }
     

    折角

    原理:利用切角、伪类、渐变、旋转实现

    HTML:

    <div class="corner">
        <p>corner</p>
    </div>

    CSS

    .corner {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 120px;
        line-height: 120px;
        padding: 40px;
        text-align: center;
        color: white;
        font-size: 200%;
        background: linear-gradient(-150deg, transparent 1.5em, yellowgreen 0);
        border-radius: .5em;
    }
    
    .corner:before {
        content: '';
        position: absolute;
        top: 0;
        right: 0;
        background: linear-gradient(to left bottom, transparent 50%, rgba(0, 0, 0, .2) 0, rgba(0, 0, 0, .4)) 100% 0 no-repeat;
        width: 1.73em;
        height: 3em;
        transform: translateY(-1.3em) rotate(-30deg);
        transform-origin: bottom right;
        border-bottom-left-radius: inherit;
        box-shadow: -.2em .2em .3em -.1em rgba(0, 0, 0, .15);
    }

    spectiveBlur

    纯 CSS 方案实现背景变暗效果(hover按钮触发)

    HTML:

    <div class="spectiveBlur">
        <p>spectiveBlur</p>
    </div>

    CSS

    .spectiveBlur {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 220px;
        line-height: 160px;
        transform: translate(-50%, -50%);
        border-radius: 10px;
        overflow: hidden;
        background: #E91E63;
        color: #fff;
        font-size: 200%;
        text-align: center;
        cursor: pointer;
        transition: transform .2s;
    }
    
    .spectiveBlur:hover {
        box-shadow: 0 0 0 1920px rgba(0, 0, 0, .7);
        transform: translate(-50%, -50%) scale(1.2);
    }

    条纹背景图

    原理:利用渐变实现

    HTML

    <div class="stripe">
        <p>stripe</p>
    </div>

    CSS

    .stripe {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 200px;
        line-height: 200px;
        text-align: center;
        color: white;
        font-size: 200%;
        background: deeppink;
        border-radius: .5em;
        background: repeating-linear-gradient(45deg, #CC9999, #CC9999 15px, #CCCCCC 0, #CCCCCC 30px)
    }

    晴天(sun)(单标签实现)

    原理:利用线性渐变、阴影、旋转实现

     HTML:

    <div class="sun">
        <p>sun</p>
    </div>

    CSS

    .sun {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 200px;
        height: 260px;
        transform: translate(-50%, -50%);
        text-align: center;
        font-size: 200%;
        color: #fff;
        background: #0BF;
        border-radius: 5px;
    }
    
    .sun:before {
        content: "";
        position: absolute;
        width: 80px;
        height: 80px;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        border-radius: 50%;
        background: rgba(255, 238, 68, 1);
        box-shadow: 0 0 0 15px rgba(255, 255, 0, 0.2), 0 0 15px #fff;
        z-index: -10;
    }
    
    .sun:after {
        content: "";
        position: absolute;
        top: 50%;
        left: 50%;
        height: 160px;
        width: 160px;
        transform: translate(-50%, -50%) rotate(30deg);
        z-index: -100;
        background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0) 100%), -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0) 100%);
        background-size: 20px 100%, 100% 20px;
        background-repeat: no-repeat;
        background-position: center center, center center;
        animation: sunRotate 10s linear infinite;
    }
    
    @keyframes sunRotate {
        0% {
            transform: translate(-50%, -50%) rotate(30deg);
        }
        100% {
            transform: translate(-50%, -50%) rotate(390deg);
        }
    }

    多云(cloudy)(单标签实现)

    原理:利用线性渐变、阴影、缩放实现

    HTML

    <div class="cloudy">
        <p>cloudy</p>
    </div>

    CSS

    .cloudy {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 200px;
        height: 260px;
        transform: translate(-50%, -50%);
        text-align: center;
        font-size: 200%;
        color: #fff;
        background: #2EB5E5;
        border-radius: 5px;
    }
    
    .cloudy:before {
        content: "";
        text-indent: 23px;
        font-size: 22px;
        line-height: 40px;
        color: #333;
        position: absolute;
        height: 50px;
        width: 50px;
        background: #FFFFFF;
        left: 30%;
        top: 45%;
        transform: translate(-50%, -50%);
        border-radius: 50%;
        box-shadow: #FFFFFF 65px -15px 0 -5px, #FFFFFF 25px -25px, #FFFFFF 30px 10px, #FFFFFF 60px 15px 0 -10px, #FFFFFF 85px 5px 0 -5px, #C8C8C8 35px -35px, #C8C8C8 66px -27px 0 -5px, #C8C8C8 91px -10px 0 -8px;
        animation: cloudy 5s ease-in-out infinite;
    }
    
    .cloudy:after {
        content: "";
        position: absolute;
        top: 80%;
        left: 50%;
        height: 15px;
        width: 120px;
        background: rgba(0, 0, 0, .5);
        border-radius: 50%;
        transform: translate(-50%, -50%);
        animation: cloudy_shadow 5s ease-in-out infinite;
    }
    
    @keyframes cloudy {
        50% {
            transform: translate(-50%, -70%);
        }
        100% {
            transform: translate(-50%, -50%);
        }
    }
    
    @keyframes cloudy_shadow {
        50% {
            transform: translate(-50%, -50%) scale(0.8);
            background: rgba(0, 0, 0, .2);
        }
        100% {
            transform: translate(-50%, -50%) scale(1);
            background: rgba(0, 0, 0, .5);
        }
    }

    更多效果可以参考原网站:CSS实现各种图形

    PS:这些CSS效果都是奇技淫巧,不过可以加深对CSS样式的理解,值得尝试 

  • 相关阅读:
    sql语句常考知识点总结
    服务器搭建
    软件测试面试题
    linux常用命令
    kibana常用查询删除语法
    python从kafka消费数据
    foxmail客户端,写邮件窗口弹不出来
    JMeter学习——测试文件下载
    python中取两个列表中不同的元素
    MySQL主从复制
  • 原文地址:https://www.cnblogs.com/QianBoy/p/8672834.html
Copyright © 2011-2022 走看看