CSS形成圆、平行四边形、菱形、梯形、饼图

参考《CSS揭秘》形状部分

CSS揭秘pdf百度网盘 链接 提取码: yg3v

(椭)圆、半(椭)圆、1/4(椭)圆   宽高相等,显示为圆;宽高不等,显示为椭圆

border-radius: 10px 5px / 7px 10px 3px;
// 使用(/)单独指定水平和垂直半径;斜杠两侧值类似margin、padding用法,分别设置左上、右上、右下、左下

圆:

border-radius: 50%;

 半圆:

上下半圆宽高2:1,左右半圆宽高1:2 

border-radius: 50% / 100% 100% 0 0; //上半圆
border-radius: 50% / 0 0 100% 100%; //下半圆
border-radius: 100% 0 0 100% / 50%; //左半圆
border-radius: 0 100% 100% 0 / 50%; //右半圆

 1/4 圆:

border-radius: 100% 0 0 0; //左上
border-radius: 0 100% 0 0; //右上
border-radius: 0 0 100% 0; //右下
border-radius: 0 0 0 100%; //左下

 

平行四边形

使用transform变形

<div style="width: 100px; transform: skewX(-45deg); background: #aaaaaa ">test</div>

只让容器的形状倾斜,而保持其内容不变

方法1:

嵌套元素,对内容再应用一次反向的skew() 变形,抵消容器的变形效果

<div style="width: 100px; transform: skewX(-45deg); background: #aaaaaa ">
	<div style="transform: skewX(45deg);">test</div>
</div>

方法2:

使用伪元素,把样式放到伪元素上对其变形,此方式不影响内容.实际使用时发现只要上级元素中设置了background就会导致背景无法展示,这时候给元素加一个高度即可解决此问题

<body>
<style type="text/css"> 
.button {
    position: relative;
    /* 其他的文字颜色、内边距等样式…… */
}
.button::before {
    content: ''; /* 用伪元素来生成一个矩形 */
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
    z-index: -1;
    background: #58a;
    transform: skew(-45deg);
}
</style>

<div class="button" style="width: 100px;">
	test
</div>

菱形:

使用transform旋转图片

.picture {
    width: 400px;
    transform: rotate(45deg);
    overflow: hidden;
}
.picture > img {
    max-width: 100%;
    transform: rotate(-45deg) scale(1.42);
}
<div className='picture'>
    <img src={image} alt=""/>
</div>

使用clip-path实现

.picture > img {
   clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
}
<div className='picture'>
    <img src={image} alt=""/>
</div>

切角

使用CSS渐变实现斜面切角

background: #58a;
background:
linear-gradient(135deg, transparent 15px, #58a 0)
top left,
linear-gradient(-135deg, transparent 15px, #58a 0)
top right,
linear-gradient(-45deg, transparent 15px, #58a 0)
bottom right,
linear-gradient(45deg, transparent 15px, #58a 0)
bottom left;
background-size: 50% 50%;
background-repeat: no-repeat;

使用CSS渐变实现弧形切角

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

梯形:

把transform-origin 改成bottom left 或bottom right,就可以得到左侧倾斜或右侧倾斜的标签页。有一点需要注意 梯形角度依赖元素宽度,使用中要注意保持宽度一致才能获得角度一致的梯形 

<!DOCTYPE html>
<html>
<head>
<style> 
.tab {
    position: relative;
    display: inline-block;
    padding: .5em 1em .35em;
    color: white;
}
.tab::before {
    content: ''; /* 用伪元素来生成一个矩形 */
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
    z-index: -1;
    background: #58a;
    transform: perspective(.5em) rotateX(5deg);
    transform: scaleY(1.3) perspective(.5em)
    rotateX(5deg);
    transform-origin: bottom;
}
</style>
</head>
<body>

<div class='tab'>div 元素。</div>

</body>
</html>

效果: 

饼图 :

 老实说不建议用css实现饼图(SVG他不香吗),但作为一种方式学习还可以...

<!DOCTYPE html>
<html>
<head>
<style> 
.pie {
    position: relative;
    width: 100px;
    line-height: 100px;
    border-radius: 50%;
    background: yellowgreen;
    background-image:
    linear-gradient(to right, transparent 50%, #655 0);
    color: transparent;
    text-align: center;
}
@keyframes spin {
    to { transform: rotate(.5turn); }
}
@keyframes bg {
    50% { background: #655; }
}
.pie::before {
    content: '';
    position: absolute;
    top: 0; left: 50%;
    width: 50%; height: 100%;
    border-radius: 0 100% 100% 0 / 50%;
    background-color: inherit;
    transform-origin: left;
    animation: spin 50s linear infinite,
    bg 100s step-end infinite;
    animation-play-state: paused;
    animation-delay: inherit;
}
</style>
</head>
<body>

<div class="pie" style="animation-delay: -90s">11</div>

</body>
</html>

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值