深入分析纯css画圆角矩形原理

来源:互联网 发布:p2p网络终结者破解版 编辑:程序博客网 时间:2024/04/29 15:41
 

深入分析纯css画圆角矩形原理

原理分析:
在这里,利用的是像素点绘制圆角的方法,先看一个用像素绘制的圆角:

扩大了就是这样:

我们把它分作若干个部分来写样式,请看图示:

看过demo的朋友应该知道了我所描述的几大优势:
1. 无论是在横向还是纵向上都保持着无限的扩展性。
2. 没有hack,且不易出现浏览器兼容性问题。
3. 圆角颜色易自定义。
4. 圆角大小可自定义。
5. 圆角模式易自定义。
6. 可以存在于任意背景中。
7. html结构清晰。

接下来我们逐个分析:

1. 无论是在横向还是纵向上都保持着无限的扩展性。
试着修改box的width、content的height,就能看到效果。

2. 没有hack,且不易出现浏览器兼容性问题。
这个大家用各种浏览器试试就知道了,该演示仅在IE6/FF2/OP9下通过测试,但个人觉得多数浏览器应该没什么问题,因为用到的样式都很基础。

3. 圆角颜色易自定义。
大家试着将这段样式复制到已有样式的最后面。
程序代码 程序代码
/*---定义边框颜色---*/
.box .r2,
.box .r3,
.box .r4,
.box .content {
     border-color:#2d437b;
}
.box .r1 {
     background:#2d437b;
}
/*---定义背景颜色---*/
.box .r2,
.box .r3,
.box .r4,
.box .content {
     background:#f3fdff;
}

效果如下:
HTML代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <style> body { color:#000; background:#999; font-size:12px; line-height:1.5; margin:0; } .box { width:500px; margin:30px auto; } .box .r1 { height:1px; overflow:hidden; margin:0 5px; background:#f60; } .box .r2 { height:1px; border-left:2px solid #f60; border-right:2px solid #f60; margin:0 3px; background:#ff0; overflow:hidden; } .box .r3 { height:1px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 2px; background:#ff0; overflow:hidden; } .box .r4 { height:2px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 1px; background:#ff0; overflow:hidden; } .box .content { background:#ff0; border-left:1px solid #f60; border-right:1px solid #f60; padding:7px 10px; zoom:1; } /*---修改边框颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { border-color:#2d437b; } .box .r1 { background:#2d437b; } /*---修改背景颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { background:#f3fdff; } </style> <body> <div class="box"> <div class="top"> <div class="r1"></div> <div class="r2"></div> <div class="r3"></div> <div class="r4"></div> </div> <div class="content"> <p> 这样形成的圆角,是具备多种优势的:<br /> 1. 无论是在横向还是纵向上都保持着无限的扩展性。(试着修改box的width、content的height。)<br /> 2. 没有hack,且不易出现浏览器兼容性问题。<br /> 3. 圆角颜色易自定义。<br /> 4. 圆角大小可自定义。(试着将class="box"的修改为class="box2"。)<br /> 5. 圆角模式易自定义。<br /> 6. 可以存在于任意背景中。(试着修改body的background。)<br /> 7. html结构清晰。 </p> </div> <div class="bottom"> <div class="r4"></div> <div class="r3"></div> <div class="r2"></div> <div class="r1"></div> </div> </div> </body> </html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

4. 圆角大小可自定义。
以同样的方式,将以下代码加入源码中,然后试着将class="box"修改为class="box2"试试。(也就是说,用户只需要告诉你他需要的是box1还是box2,你就能给他所需要的圆角。)
程序代码 程序代码
/*---修改圆角大小---*/
.box2 {
     width:500px;
     margin:30px auto;
}
.box2 .r1 {
     height:1px;
     overflow:hidden;
     margin:0 2px;
     background:#f60;
}
.box2 .r2 {
     height:1px;
     overflow:hidden;
     margin:0 1px;
     border-left:1px solid #f60;
     border-right:1px solid #f60;
     background:#ff0;
}
.box2 .content {
     background:#ff0;
     border-left:1px solid #f60;
     border-right:1px solid #f60;
     padding:7px 10px;
     zoom:1;
}

效果如下:
HTML代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <style> body { color:#000; background:#999; font-size:12px; line-height:1.5; margin:0; } .box { width:500px; margin:30px auto; } .box .r1 { height:1px; overflow:hidden; margin:0 5px; background:#f60; } .box .r2 { height:1px; border-left:2px solid #f60; border-right:2px solid #f60; margin:0 3px; background:#ff0; overflow:hidden; } .box .r3 { height:1px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 2px; background:#ff0; overflow:hidden; } .box .r4 { height:2px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 1px; background:#ff0; overflow:hidden; } .box .content { background:#ff0; border-left:1px solid #f60; border-right:1px solid #f60; padding:7px 10px; zoom:1; } /*---修改边框颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { border-color:#2d437b; } .box .r1 { background:#2d437b; } /*---修改背景颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { background:#f3fdff; } /*---修改圆角大小---*/ .box2 { width:500px; margin:30px auto; } .box2 .r1 { height:1px; overflow:hidden; margin:0 2px; background:#f60; } .box2 .r2 { height:1px; overflow:hidden; margin:0 1px; border-left:1px solid #f60; border-right:1px solid #f60; background:#ff0; } .box2 .content { background:#ff0; border-left:1px solid #f60; border-right:1px solid #f60; padding:7px 10px; zoom:1; } </style> <body> <div class="box2"> <div class="top"> <div class="r1"></div> <div class="r2"></div> <div class="r3"></div> <div class="r4"></div> </div> <div class="content"> <p> 这样形成的圆角,是具备多种优势的:<br /> 1. 无论是在横向还是纵向上都保持着无限的扩展性。(试着修改box的width、content的height。)<br /> 2. 没有hack,且不易出现浏览器兼容性问题。<br /> 3. 圆角颜色易自定义。<br /> 4. 圆角大小可自定义。(试着将class="box"的修改为class="box2"。)<br /> 5. 圆角模式易自定义。<br /> 6. 可以存在于任意背景中。(试着修改body的background。)<br /> 7. html结构清晰。 </p> </div> <div class="bottom"> <div class="r4"></div> <div class="r3"></div> <div class="r2"></div> <div class="r1"></div> </div> </div> </body> </html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

5. 圆角模式易自定义。
同样的方式,大家将以下样式添加进去试试?
程序代码 程序代码
/*---修改圆角模式---*/
.box .top .r1,
.box .top .r2,
.box .top .r3,
.box .top .r4 {
     margin-right:0;
     border-right:1px;
}
.box .bottom .r1,
.box .bottom .r2,
.box .bottom .r3,
.box .bottom .r4 {
     margin-left:0;
     border-left:1px;
}

效果如下:
HTML代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <style> body { color:#000; background:#999; font-size:12px; line-height:1.5; margin:0; } .box { width:500px; margin:30px auto; } .box .r1 { height:1px; overflow:hidden; margin:0 5px; background:#f60; } .box .r2 { height:1px; border-left:2px solid #f60; border-right:2px solid #f60; margin:0 3px; background:#ff0; overflow:hidden; } .box .r3 { height:1px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 2px; background:#ff0; overflow:hidden; } .box .r4 { height:2px; border-left:1px solid #f60; border-right:1px solid #f60; margin:0 1px; background:#ff0; overflow:hidden; } .box .content { background:#ff0; border-left:1px solid #f60; border-right:1px solid #f60; padding:7px 10px; zoom:1; } /*---修改边框颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { border-color:#2d437b; } .box .r1 { background:#2d437b; } /*---修改背景颜色---*/ .box .r2, .box .r3, .box .r4, .box .content { background:#f3fdff; } /*---修改圆角大小---*/ .box2 { width:500px; margin:30px auto; } .box2 .r1 { height:1px; overflow:hidden; margin:0 2px; background:#f60; } .box2 .r2 { height:1px; overflow:hidden; margin:0 1px; border-left:1px solid #f60; border-right:1px solid #f60; background:#ff0; } .box2 .content { background:#ff0; border-left:1px solid #f60; border-right:1px solid #f60; padding:7px 10px; zoom:1; } /*---修改圆角模式---*/ .box .top .r1, .box .top .r2, .box .top .r3, .box .top .r4 { margin-right:0; border-right:1px; } .box .bottom .r1, .box .bottom .r2, .box .bottom .r3, .box .bottom .r4 { margin-left:0; border-left:1px; } </style> <body> <div class="box"> <div class="top"> <div class="r1"></div> <div class="r2"></div> <div class="r3"></div> <div class="r4"></div> </div> <div class="content"> <p> 这样形成的圆角,是具备多种优势的:<br /> 1. 无论是在横向还是纵向上都保持着无限的扩展性。(试着修改box的width、content的height。)<br /> 2. 没有hack,且不易出现浏览器兼容性问题。<br /> 3. 圆角颜色易自定义。<br /> 4. 圆角大小可自定义。(试着将class="box"的修改为class="box2"。)<br /> 5. 圆角模式易自定义。<br /> 6. 可以存在于任意背景中。(试着修改body的background。)<br /> 7. html结构清晰。 </p> </div> <div class="bottom"> <div class="r4"></div> <div class="r3"></div> <div class="r2"></div> <div class="r1"></div> </div> </div> </body> </html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

6. 可以存在于任意背景中。
因为是模拟的像素图,所以多余的部分都是全透明的,大家试着修改一下body的background就行了。

7. html结构清晰。

这个纯属个人看法。


以上文章来自:蓝光

纯CSS定义的圆角边框

<style type="text/css">

#xsnazzy h1, #xsnazzy h2, #xsnazzy p {margin:0 10px; letter-spacing:1px;}

#xsnazzy h1 {font-size:2.5em; color:#000;}

#xsnazzy h2 {font-size:2em;color:#06a; border:0;} #xsnazzy p {padding-bottom:0.5em;}

#xsnazzy h2 {padding-top:0.5em;} #xsnazzy {background: transparent; margin:1em;}

.xtop, .xbottom {display:block; background:transparent; font-size:1px;}

.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden;}

.xb1, .xb2, .xb3 {height:1px;}

.xb2, .xb3, .xb4 {background:#fff; border-left:1px solid #ccc; border-right:1px solid #ccc;}

.xb1 {margin:0 5px; background:#ccc;}

.xb2 {margin:0 3px; border-width:0 2px;}

.xb3 {margin:0 2px;} .xb4 {height:2px; margin:0 1px;}

.xboxcontent {display:block; background:#fff; border:0 solid #ccc; border-width:0 1px;}

</style>

<div id="xsnazzy">

<b class="xtop">

   <b class="xb1"></b>

   <b class="xb2"></b>

   <b class="xb3"></b>

   <b class="xb4"></b>

</b>

<div class="xboxcontent">

<h1>CSS论坛欢迎您!</h1>

<p> CSSBBS是一个专业的CSS标准化的交流社区,打造最权威的CSS论坛。 </p>

</div>

<b class="xbottom">

<b class="xb4"></b>

<b class="xb3"></b>

<b class="xb2"></b>

<b class="xb1"></b>

</b>

</div>
提示:复制以上代码用记事本另存为HTML文件可预览效果,可以修改部分代码后再运行!

CSS无图片无锯齿完美圆角边框

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;

charset=gb2312">
<title>CSS无图片无锯齿完美圆角边框</title>
<style type="text/css">


body{background-color:#000000;}


/* [display:block] 块状显示,在元素后面添加换行符,也就是说其他元素不能在其后面并列显示;在这里是圆角正常显示的关键之一 */


.spiffy{display:block}

.spiffy *{display:block; height:1px; overflow:hidden; font-

size:.01em; background:#FF0303;}

.spiffy1{margin-left:3px; margin-right:3px; padding-left:1px;

padding-right:1px; border-left:1px solid #6d0101; border-

right:1px solid #6d0101; background:#bf0202;}

.spiffy2{margin-left:1px; margin-right:1px; padding-right:1px;

padding-left:1px; border-left:1px solid #190000; border-

right:1px solid #190000; background:#ce0202;}

.spiffy3{margin-left:1px; margin-right:1px; border-left:1px

solid #ce0202; border-right:1px solid #ce0202;}

.spiffy4{border-left:1px solid #6d0101; border-right:1px solid

#6d0101;}

.spiffy5{border-left:1px solid #bf0202; border-right:1px solid

#bf0202;}

.spiffyfg{background:#FF0303;}

</style>
</head>

<body>
<div>
    <!-- 上面的两圆角开始 -->
    <b class="spiffy">
        <b class="spiffy1"><b><!-- 用主体颜色盖住外层[b]的底色 --></b></b>
        <b class="spiffy2"><b><!-- 用主体颜色盖住外层[b]的底色 --></b></b>
        <b class="spiffy3"></b>
        <b class="spiffy4"></b>
        <b class="spiffy5"></b>
    </b>
    <!-- 上面的两圆角结束 -->
    <div class="spiffyfg">
    <!-- content goes here -->
    CSS无图片无锯齿完美圆角边框
    <br>
    <br>
    <br>
    <br>
    </div>
    <!-- 下面的两圆角开始 -->
    <b class="spiffy">
        <b class="spiffy5"></b>
        <b class="spiffy4"></b>
        <b class="spiffy3"></b>
        <b class="spiffy2"><b><!-- 用主体颜色盖住外层[b]的底色 --></b></b>
        <b class="spiffy1"><b><!-- 用主体颜色盖住外层[b]的底色 --></b></b>
    </b>
    <!-- 下面的两圆角结束 -->
</div>
</body></html>