资讯专栏INFORMATION COLUMN

[CSS]《CSS揭秘》第三章——形状

ysl_unh / 1862人阅读

摘要:自适应椭圆斜杠前为水平半径,后为垂直半径。和下特有的,用于在渲染中向元素逻辑上的头部或尾部添加内容。所以不要用或展示有实际意义的内容,尽量使用它们显示修饰性内容,例如图标。和必须配合属性来使用,用来定义插入的内容,必须有值,至少是空。

自适应椭圆
border-radius:50% / 50%;//斜杠前为水平半径,后为垂直半径。
    background: #fb3;
    border-radius: 100% 0 0 100%/50%;

    width: 200px;
    height: 100px;
    background: #fb3;
    border-radius: 100% 0 0 0;

平行四边形 方法一
    #testdiv{
        width: 100px;
        height: 30px;
        line-height: 30px;
        margin:0 auto;
        margin-top: 50px;
        background: #fb5;
        transform: skewX(-45deg);
    }
    #testdiv >div{
        transform: skewX(45deg);
        text-align: center;
    }

方法二(使用伪元素)
#testdiv{
    width: 100px;
    height: 30px;
    line-height: 30px;
    margin:0 auto;
    margin-top: 50px;
    text-align: center;
    position: relative;//给宿主元素应用 position: relative 样式
}
#testdiv::before{
    /*为伪元素设置 position:absolute, 然后再把所有偏移量设置为零, 以便让它在水平和垂直方向上都
被拉伸至宿主元素的尺寸*/
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
    z-index: -1;
    background: #fb5;
    transform: skewX(-45deg);
    content: "";
}

*:

常见伪元素———::first-letter,::first-line,::before,::after,::selection。
::before和::after下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容。
这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入。
所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容,例如图标。
举例:网站有些联系电话,希望在它们前加一个icon☎,就可以使用:before伪元素。
::before和::after必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空。
菱形
img{
    clip-path: polygon(50% 0,100% 50%,50% 100%,0 50%);//创建多边形函数,参数为各个点坐标
    transition: 1s clip-path;
}
img:hover{
    clip-path: polygon(0 0,100% 0,100% 100%,0 100%);//覆盖时变正方形
}

切角效果
    background: #fb3;
    background: linear-gradient(-135deg,transparent 15px,#fb3 0) top right,
                linear-gradient(135deg,transparent 15px,#fb3 0) top left,
                linear-gradient(-45deg,transparent 15px,#fb3 0) bottom right,
                linear-gradient(45deg,transparent 15px,#fb3 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;

    background: #fb3;
    background: radial-gradient(circle at top right,transparent 15px,#fb3 0) top right,
                radial-gradient(circle at top left,transparent 15px,#fb3 0) top left,
                radial-gradient(circle at bottom right,transparent 15px,#fb3 0) bottom right,
                radial-gradient(circle at bottom left,transparent 15px,#fb3 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;

梯形标签页
#testdiv{
    position: relative;
    display: inline-block;
    padding: .3em 1em 0;
}

#testdiv::before{
    content:"";
    position: absolute;
    top: 0;
    right: 0;
    bottom:0;
    left: 0;
    z-index: -1;
    background: #ccc;
    background-image: linear-gradient(hsla(0,0%,100%,.6),hsla(0,0%,100%,0));
    border: 1px solid rgba(0, 0, 0, .4);
    border-bottom: none;
    border-radius: .5em .5em 0 0;
    box-shadow: 0 .15em white inset;
    transform: perspective(.5em) rotateX(5deg);
    transform-origin: bottom;//当它在 3D 空间中旋转时, 可以把它的底边固定住
}

简单的饼图 基于transform的饼图(动画版)
@keyframes spin{
    to{
        transform: rotate(.5turn);
    }
}
@keyframes bg{
    50%{
        background: #655;
    }
}
#testdiv{
    margin: 50px;

    width: 100px;
    height: 100px;
    border-radius: 50%;
    background: yellowgreen;
    background-image: linear-gradient(to right,transparent 50%,#655 0);
}

#testdiv::before{
    content:"";
    display: block;
    margin-left: 50%;
    height: 100%;
    background-color: inherit;
    transform-origin: left;
    border-radius: 0 100% 100% 0 / 50%;
    animation: spin 3s linear infinite,
               bg 6s step-end infinite;
}

*:用到CSS 3的animation 属性。

多个比例不同的静态饼图
@keyframes spin{
    to{
        transform: rotate(.5turn);
    }
}
@keyframes bg{
    50%{
        background: #655;
    }
}
#testdiv{
    margin: 50px;

    width: 100px;
    height: 100px;
    border-radius: 50%;
    background: yellowgreen;
    background-image: linear-gradient(to right,transparent 50%,#655 0);
}

#testdiv::before{
    content:"";
    display: block;
    margin-left: 50%;
    height: 100%;
    background-color: inherit;
    transform-origin: left;
    border-radius: 0 100% 100% 0 / 50%;
    animation: spin 50s linear infinite,
               bg 100s step-end infinite;
    animation-play-state: paused;
    animation-delay: inherit;

SVG 方案

......

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/116785.html

相关文章

  • css揭秘笔记——形状

    摘要:把改成,就变成了这样实现边框内圆角多重边框还有下实现多重背景为某一层背景单独设置类似这样的属性等等。裁切路径方案这种方案,当内边距不够宽时,会裁切掉文本。 自适应的椭圆(border-radius的用法) 单独指定水平和垂直半径 长宽固定的元素,可以通过指定宽高的一半,变为椭圆形,格式为两个值用/分开。 width: 100px; height: 80px; border-radi...

    dantezhao 评论0 收藏0
  • css-secrets (css揭秘) 知识点目录,值得深入学习!

    摘要:通过模糊来弱化背景和滚动提示使用两层背景,控制交互式的图片对比控件范围输入控件方式书中有很详细的解答提醒自己要回顾。 1. 第一章 css编码技巧 第二章 边框与背景 半透明边框 hsla 多重边框 box-shadow outline 灵活的背景定位 background-position css3该属性可以指定偏移量,////bac...

    DevWiki 评论0 收藏0
  • css揭秘》读书笔记

    摘要:但是根据本司机两年的开发经验来看,在实际开发中很少来使用这个单位。由于基本都是一些实用性的技巧,我就不一一列举了,建议自读。很好很实用的一本书。 第一章 引言 css编码技巧 在引言中,作者提到使用em与inherit来实现css代码的简洁与可维护性。但是根据本司机两年的开发经验来看,在实际开发中很少来使用em这个单位。如何用以及何时去使用,还是要根据实际开发需求来定吧,毕竟这两个属性...

    xiguadada 评论0 收藏0
  • css揭秘》下(伪元素,文字背景,垂直居中技巧,文字环绕)

    摘要:本篇主要记录揭秘一书中后面几章的常用技巧。文字环绕的重点在于即文字围绕着路径来显示。本篇主要记录《CSS3揭秘》一书中后面几章的常用技巧。 1、伪元素换行 先看下HTML代码,如下 当爱的故事剩听说 我找不到你单纯的面孔 默认显示效果: 一般情况下,我们喜欢直接在第一个span元素后面加个换行符,但是它对于语义来说并不友好,或者将第一...

    longmon 评论0 收藏0
  • CSS揭秘之多重边框

    摘要:多重边框的两种实现方案以由逗号分隔的列表来描述一个或多个阴影效果。轮廓与边框在以下几个方面存在不同轮廓不占据空间,它们被描绘于内容之上轮廓可以是非矩形的。是元素的轮廓,悬浮在元素边框之上。也就是说,它们之间的颜色会继承父元素的背景色。 多重边框的两种实现方案: border-shadow outline Mutiple border ...

    liuyix 评论0 收藏0

发表评论

0条评论

ysl_unh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<