Skip to content

border-radius

css3 之前绘制圆形通常使用 UI 给出的设计图作为背景或者 icon 使用。

比如画一个圆形:

<div class="box"></div>

<style>
    .box{ 
        width:60px;
        height:60px;
        background:url('./xxx.png') no-repeat center center;
    }
</style>
<div class="box"></div>

<style>
    .box{ 
        width:60px;
        height:60px;
        background:url('./xxx.png') no-repeat center center;
    }
</style>

css3 问世后,可以使用 border-radius 绘制圆形。

比如绘制一个圆形:

<div class="box"></div>

<style>
    .box{ 
        width:200px;
        height:200px;
        border-top-left-radius: 50%;
        border-top-right-radius: 50%;
        border-bottom-left-radius: 50%;
        border-bottom-right-radius: 50%;
        background-color:#f00;
    }
</style>
<div class="box"></div>

<style>
    .box{ 
        width:200px;
        height:200px;
        border-top-left-radius: 50%;
        border-top-right-radius: 50%;
        border-bottom-left-radius: 50%;
        border-bottom-right-radius: 50%;
        background-color:#f00;
    }
</style>

样式可以简写成:

.box{ 
        width:200px;
        height:200px;
        border-radius: 50%;
        background-color:#f00;
    }
.box{ 
        width:200px;
        height:200px;
        border-radius: 50%;
        background-color:#f00;
    }

绘制半圆形

绘制半圆形考虑将长度或宽度减少一半(如:width: 200 那么 height: 100)。

比如绘制一个半圆形:

<div class="box"></div>

<style>
    .box{
        width: 100px;
        height: 200px;
        border-radius: 100px 0 0 100px;
        background-color:#f00;
    }
</style>
<div class="box"></div>

<style>
    .box{
        width: 100px;
        height: 200px;
        border-radius: 100px 0 0 100px;
        background-color:#f00;
    }
</style>

伪元素

:first-letter:可以控制文本首个汉字或字母样式。

:first-line:可以控制文本首行样式。

比如:

<p>You can use the x pseudo-element to add a special effect to the first letter of a text!</p>

<style>
p{ 
    width:30px;
    height:30px;
    font-size: 14px;
    border:1px solid #000;
}
p::first-letter{
    font-size: 24px;
}
p::first-line{
    color: #f00;
}
</style>
<p>You can use the x pseudo-element to add a special effect to the first letter of a text!</p>

<style>
p{ 
    width:30px;
    height:30px;
    font-size: 14px;
    border:1px solid #000;
}
p::first-letter{
    font-size: 24px;
}
p::first-line{
    color: #f00;
}
</style>

before:after 在元素前与元素后插入新内容。注意的是必须使用 content 属性。

比如:

<div class="box">讲台词</div>

<style>
    .box::before{ 
        content: '小明'
    }
    .box::after{ 
        content: '很棒!'
    }
</style>
<div class="box">讲台词</div>

<style>
    .box::before{ 
        content: '小明'
    }
    .box::after{ 
        content: '很棒!'
    }
</style>

CSS3绘制一个正方形均分的三角形

<div class="box"></div>

<style>
.box{ 
    border-top:50px solid #999;
    border-left: 50px solid #f00;
    border-bottom: 50px solid #0f0;
    border-right: 50px solid #00f;
    width:0;
    height:0;
}
</style>
<div class="box"></div>

<style>
.box{ 
    border-top:50px solid #999;
    border-left: 50px solid #f00;
    border-bottom: 50px solid #0f0;
    border-right: 50px solid #00f;
    width:0;
    height:0;
}
</style>

CSS3绘制三角形

<div class="box"></div>

<style>
.box{ 
    border-top:50px solid transparent;
    border-left: 50px solid #f00;
    border-bottom: 50px solid transparent;
    border-right: 0 solid #00f;
    width:0;
    height:0;
}
</style>
<div class="box"></div>

<style>
.box{ 
    border-top:50px solid transparent;
    border-left: 50px solid #f00;
    border-bottom: 50px solid transparent;
    border-right: 0 solid #00f;
    width:0;
    height:0;
}
</style>

绘制单独三角形,将该三角形的反向 border 属性设置为 0,其他方向 border 属性设置为透明 transparent

CSS3绘制对话框

<div class="dialog">Hello, everyone!</div>


<style>

.dialog{
    width:200px;
    height:60px;
    background-color:#6a6;
    border-radius:10px;
    position: relative;
}

.dialog::before{
    content:'';
    border-top:10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 0 solid #6a6;
    border-right: 10px solid #6a6;
    position: absolute;
    top: 20px;
    left: -10px;
}


</style>
<div class="dialog">Hello, everyone!</div>


<style>

.dialog{
    width:200px;
    height:60px;
    background-color:#6a6;
    border-radius:10px;
    position: relative;
}

.dialog::before{
    content:'';
    border-top:10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 0 solid #6a6;
    border-right: 10px solid #6a6;
    position: absolute;
    top: 20px;
    left: -10px;
}


</style>

CSS3绘制菱形

首先绘制正方形,然后使用 transform 旋转(rotate)属性,旋转一定角度,即变化成菱形。

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


<style>

.diamond{
    width:200px;
    height:200px;
    background-color:#6a6;
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);   
    
    margin: 200px;
}


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


<style>

.diamond{
    width:200px;
    height:200px;
    background-color:#6a6;
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);   
    
    margin: 200px;
}


</style>

CSS3绘制平行四边形

首先绘制长方形,然后使用 transform 倾斜(skew) 属性,倾斜一定角度,即变化成平行四边形。

<div class="parallel"></div>


<style>

.parallel{
    width:200px;
    height:100px;
    background-color:#6a6;
    -webkit-transform: skew(45deg);
    -ms-transform: skew(45deg);
    -o-transform: skew(45deg);
    transform: skew(45deg); 

    margin:200px;
}

</style>
<div class="parallel"></div>


<style>

.parallel{
    width:200px;
    height:100px;
    background-color:#6a6;
    -webkit-transform: skew(45deg);
    -ms-transform: skew(45deg);
    -o-transform: skew(45deg);
    transform: skew(45deg); 

    margin:200px;
}

</style>

skew 有两个参数: skew(x轴, y轴)

CSS3 绘制五角星

首先绘制一个钝角三角形,然后旋转正 35 度;使用伪元素绘制一个锐角和一个钝角三角形,分别旋转逆时针 35 度和逆时针 70度。

<div class="star"></div>

<style>

.star{
    width:0;
    height:0;
    border-top:0px solid #f00;
    border-bottom:70px solid #f00;
    border-left:100px solid transparent;
    border-right:100px solid transparent;
    transform: rotate(35deg);

    position: relative;
    margin:  200px auto;
}

.star::before{
    content: '';
    border-top:0px solid #f00;
    border-bottom:80px solid #f00;
    border-left:30px solid transparent;
    border-right:30px solid transparent;
    -webkit-transform: rotate(-35deg);
    -ms-transform: rotate(-35deg);
    -o-transform: rotate(-35deg);
    transform: rotate(-35deg);

    position: absolute;
    top: -45px;
    left: -62px;

}

.star::after{
    content: '';
    border-top:0 solid #f00;
    border-bottom: 70px solid #f00;
    border-left:100px solid transparent;
    border-right:100px solid transparent;
    -webkit-transform: rotate(-70deg);
    -ms-transform: rotate(-70deg);
    -o-transform: rotate(-70deg);
    transform: rotate(-70deg);

    position: absolute;
    top: 3px;
    left: -105px;
}


</style>
<div class="star"></div>

<style>

.star{
    width:0;
    height:0;
    border-top:0px solid #f00;
    border-bottom:70px solid #f00;
    border-left:100px solid transparent;
    border-right:100px solid transparent;
    transform: rotate(35deg);

    position: relative;
    margin:  200px auto;
}

.star::before{
    content: '';
    border-top:0px solid #f00;
    border-bottom:80px solid #f00;
    border-left:30px solid transparent;
    border-right:30px solid transparent;
    -webkit-transform: rotate(-35deg);
    -ms-transform: rotate(-35deg);
    -o-transform: rotate(-35deg);
    transform: rotate(-35deg);

    position: absolute;
    top: -45px;
    left: -62px;

}

.star::after{
    content: '';
    border-top:0 solid #f00;
    border-bottom: 70px solid #f00;
    border-left:100px solid transparent;
    border-right:100px solid transparent;
    -webkit-transform: rotate(-70deg);
    -ms-transform: rotate(-70deg);
    -o-transform: rotate(-70deg);
    transform: rotate(-70deg);

    position: absolute;
    top: 3px;
    left: -105px;
}


</style>

CSS3 绘制六角形

六角形由两个三角形拼在一起绘制成功。

首先绘制一个锐角三角形,然后使用伪元素绘制一个锐角三角形,使用相对定位结合绝对定位。

<div class="star"></div>


<style>

.star{
    width:0;
    height:0;
    border-top:0 solid #f00;
    border-bottom:100px solid #f00;
    border-left:50px solid transparent;
    border-right:50px solid transparent;

    margin:  100px auto;
    position: relative;
}

.star::after{
    content:  '';
    width: 0;
    height: 0;
    border-top:100px solid #f00;
    border-bottom:0 solid #f00;
    border-left:50px solid transparent;
    border-right:50px solid transparent;

    position: absolute;
    top: 30px;
    left: -50px;
}

</style>
<div class="star"></div>


<style>

.star{
    width:0;
    height:0;
    border-top:0 solid #f00;
    border-bottom:100px solid #f00;
    border-left:50px solid transparent;
    border-right:50px solid transparent;

    margin:  100px auto;
    position: relative;
}

.star::after{
    content:  '';
    width: 0;
    height: 0;
    border-top:100px solid #f00;
    border-bottom:0 solid #f00;
    border-left:50px solid transparent;
    border-right:50px solid transparent;

    position: absolute;
    top: 30px;
    left: -50px;
}

</style>

CSS3 绘制梯形

首先绘制一个正方体的梯形。

<div class="zheng"></div>

<style>
.zheng{
    width:50px;
    height:50px;
    border-top:50px solid #f00;
    border-bottom:50px solid #0f0;
    border-left:50px solid #00f;
    border-right:50px solid #ff0;

}
</style>
<div class="zheng"></div>

<style>
.zheng{
    width:50px;
    height:50px;
    border-top:50px solid #f00;
    border-bottom:50px solid #0f0;
    border-left:50px solid #00f;
    border-right:50px solid #ff0;

}
</style>

由以上绘制梯形,并且左右 border 减小。

<div class="zheng"></div>

<style>
.zheng{
    width:50px;
    height:0;
    border-top:50px solid #f00;
    border-bottom:0 solid #0f0;
    border-left:20px solid transparent;
    border-right:20px solid transparent;

}
</style>
<div class="zheng"></div>

<style>
.zheng{
    width:50px;
    height:0;
    border-top:50px solid #f00;
    border-bottom:0 solid #0f0;
    border-left:20px solid transparent;
    border-right:20px solid transparent;

}
</style>

CSS3 绘制五边形

<div class="wu"></div>

<style>
.wu{
    width:50px;
    height:0;
    border-top:50px solid #f00;
    border-bottom:0 solid #0f0;
    border-left:20px solid transparent;
    border-right:20px solid transparent;

    margin: 100px auto;
    position: relative;

}

.wu::before{
    content:'';
    border-top:0 solid #f00;
    border-bottom:45px solid #f00;
    border-left:45px solid transparent;
    border-right:45px solid transparent;

    position: absolute;
    top: -95px;
    left: -20px;
}

</style>
<div class="wu"></div>

<style>
.wu{
    width:50px;
    height:0;
    border-top:50px solid #f00;
    border-bottom:0 solid #0f0;
    border-left:20px solid transparent;
    border-right:20px solid transparent;

    margin: 100px auto;
    position: relative;

}

.wu::before{
    content:'';
    border-top:0 solid #f00;
    border-bottom:45px solid #f00;
    border-left:45px solid transparent;
    border-right:45px solid transparent;

    position: absolute;
    top: -95px;
    left: -20px;
}

</style>

CSS3 绘制六边形

六边形由一个长方形和两个三角形拼接结合。

<div class="six"></div>

<style>

.six{
    width:200px;
    height:100px;
    background-color:#f00;

    margin: 200px auto;
    position: relative;
}

.six::before{
    content:  '';
    border-top: 0 solid #0f0;
    border-bottom: 50px solid #0f0;
    border-left: 100px solid transparent;
    border-right: 100px solid transparent;

    position: absolute;
    top: -50px;
    left: 0;

}

.six::after{
    content:  '';
    border-top: 50px solid #0f0;
    border-bottom: 0 solid #0f0;
    border-left: 100px solid transparent;
    border-right: 100px solid transparent;

    position: absolute;
    top: 100px;
    left: 0;
}


</style>
<div class="six"></div>

<style>

.six{
    width:200px;
    height:100px;
    background-color:#f00;

    margin: 200px auto;
    position: relative;
}

.six::before{
    content:  '';
    border-top: 0 solid #0f0;
    border-bottom: 50px solid #0f0;
    border-left: 100px solid transparent;
    border-right: 100px solid transparent;

    position: absolute;
    top: -50px;
    left: 0;

}

.six::after{
    content:  '';
    border-top: 50px solid #0f0;
    border-bottom: 0 solid #0f0;
    border-left: 100px solid transparent;
    border-right: 100px solid transparent;

    position: absolute;
    top: 100px;
    left: 0;
}


</style>

CSS3 绘制心

绘制两个长方形,每个长方形各一方使用 border-radius 绘制半圆,使用 transform-origin 旋转焦点属性,两个长方形旋转一定角度拼接结合。

<div class="heart"></div>


<style>

.heart{
    width:50px;
    height: 80px;
    background-color:#f00;
    border-radius: 30px 30px 0 0;
    transform-origin: 0 100%;
    transform: rotate(-45deg);

    margin: 200px auto;
    position: relative;
}

.heart::before{
    content:  '';
    width:50px;
    height: 80px;
    background-color:#f00;
    border-radius: 30px 30px 0 0;
    transform-origin: 100% 0;
    transform: rotate(90deg);
    position: absolute;
    top: 80px;
    left: 30px;
}



</style>
<div class="heart"></div>


<style>

.heart{
    width:50px;
    height: 80px;
    background-color:#f00;
    border-radius: 30px 30px 0 0;
    transform-origin: 0 100%;
    transform: rotate(-45deg);

    margin: 200px auto;
    position: relative;
}

.heart::before{
    content:  '';
    width:50px;
    height: 80px;
    background-color:#f00;
    border-radius: 30px 30px 0 0;
    transform-origin: 100% 0;
    transform: rotate(90deg);
    position: absolute;
    top: 80px;
    left: 30px;
}



</style>

CSS3 绘制蛋形

<div class="egg"></div>


<style>

.egg{
    width: 126px;
    height:180px;
    background-color:#f00;
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;

    margin: 200px auto;
}

</style>
<div class="egg"></div>


<style>

.egg{
    width: 126px;
    height:180px;
    background-color:#f00;
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;

    margin: 200px auto;
}

</style>

CSS3 绘制太极阴阳图

绘制一个圆形,使用伪元素设置两个小圆,结合相对定位和绝对定位拼接。

<div class="taiji"></div>


<style>

body{
    background-color:#ccc;
}

.taiji{
    width:150px;
    height:300px;
    border-radius: 50%;
    background-color: #fff;
    border-left:  150px solid #000;

    margin: 200px auto;
    position: relative;
}

.taiji::before{
    content:  '';
    width: 0;
    height: 0;
    padding: 25px;
    border-radius: 50%;
    border: 50px solid #000;
    background-color: #fff;

    position: absolute;
    left: -75px;
    top: 0;
}

.taiji::after{
    content:  '';
    width: 0;
    height: 0;
    padding: 25px;
    border-radius: 50%;
    border: 50px solid #fff;
    background-color: #000;

    position: absolute;
    top: 150px;
    left: -75px;
}

</style>
<div class="taiji"></div>


<style>

body{
    background-color:#ccc;
}

.taiji{
    width:150px;
    height:300px;
    border-radius: 50%;
    background-color: #fff;
    border-left:  150px solid #000;

    margin: 200px auto;
    position: relative;
}

.taiji::before{
    content:  '';
    width: 0;
    height: 0;
    padding: 25px;
    border-radius: 50%;
    border: 50px solid #000;
    background-color: #fff;

    position: absolute;
    left: -75px;
    top: 0;
}

.taiji::after{
    content:  '';
    width: 0;
    height: 0;
    padding: 25px;
    border-radius: 50%;
    border: 50px solid #fff;
    background-color: #000;

    position: absolute;
    top: 150px;
    left: -75px;
}

</style>