码迷,mamicode.com
首页 > Web开发 > 详细

CSS揭秘(三)形状

时间:2018-04-05 18:37:24      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:方式   yellow   而且   isp   none   linear   fill   简单   ase   

Chapter 3

 1. 椭圆

椭圆的实现主要依靠 border-radius 属性,该属性确定边框切圆角的半径大小,可以指定数值 px,也可以使用百分比显示

而且该属性非常灵活,四个角可以分别设置

width: 200px;
height:200px;                    //正方形
--------------------------------------------------------
border-radius:100px;          //圆形
border-radius:50%/50%;     //水平半径 / 垂直半径
--------------------------------------------------------
border-radius:50px/20px;    //椭圆边角
--------------------------------------------------------
border-radius:50%/100% 100% 0 0 //半椭圆,底部垂直圆角为0时水平圆角也自动为0,无需再次指定

技术分享图片                技术分享图片  

2. 平行四边形

平行四边形的实现依靠 transform:skew()实现,可以自己选择倾斜的方向X轴还是Y轴

要解决的问题是:如何在容器倾斜的情况下保持内容不变?

<a href="#yolo" class="button"><div>Click me</div></a>
---------------------------------------------------
.button { transform: skewX(45deg); }
.button > div { transform: skewX(-45deg); }  //文字设置反向倾斜以抵消容器带来的倾斜

.button {
    display: inline-block;
    padding: .5em 1em;
    border: 0; margin: .5em;
    background: #58a;
    color: white;
    text-transform: uppercase;
    text-decoration: none;
    font: bold 200%/1 sans-serif;
}

技术分享图片

.button {                                 //宿主元素
    position: relative;
    display: inline-block;
    padding: .5em 1em;
    border: 0; margin: .5em;
    background: transparent;
    color: white;
    text-transform: uppercase;
    text-decoration: none;
    font: bold 200%/1 sans-serif;
}

.button::before {                          //伪元素   
    content: ‘‘; /* To generate the box */
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
    z-index: -1;
    background: #58a;
    transform: skew(45deg);
}

//想要变形元素而不变形内容可以使用

 

3. 简单的饼图

饼图实现有两种方式:渐变与SVG

渐变结合伪元素实现旋转,要注意超过50%之后要反转伪元素背景色;

通过这种方式还可以做动态旋转动画,用作加载进度的显示

<div class="pie"></div>
--------------------------------------------------------------------------------------------
.pie {
    width: 100px; height: 100px;
    border-radius: 50%;
    background: yellowgreen;
    background-image: linear-gradient(to right, transparent 50%, currentColor 0);
    color: #655;
}
.pie::before {
    content: ‘‘;
    display: block;
    margin-left: 50%;
    height: 100%;
    border-radius: 0 100% 100% 0 / 50%;
    background-color: inherit;
    transform-origin: left;
    transform:rotate(0.15turn);    //设置旋转角度
}

 

技术分享图片技术分享图片

 

 SVG实现是先画圆和描边,然后在描边的下层再画一个更大的圆

虚线描边属性 stroke-dasharray 的第一个参数表示虚线长度,第二个为虚线之间的间隙长度

<svg width="100" height="100">
<circle r="25" cx="50" cy="50"/>
<svg>
------------------------------------------
svg {
    transform: rotate(-90deg);
    background: yellowgreen;
    border-radius: 50%;
}

circle {
    fill: yellowgreen;
    stroke: #655;
    stroke-width:50;               //该宽度为半径的两倍
    stroke-dasharray:50 160;       //第二个参数为周长
}

 

 

 

 

 

 

CSS揭秘(三)形状

标签:方式   yellow   而且   isp   none   linear   fill   简单   ase   

原文地址:https://www.cnblogs.com/sleeping-dog/p/8686104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!