打印

[教程] Css可以画圈圈——像素制图法制作扩展性、兼容性优秀的圆角矩形(纯css)

这是小弟第一次写原创教程,主要提供一种圆角矩形写法的思路,请各位大虾砖下留情,谢谢。
蓝色理想经典论坛是首发地,转帖请注明出处。

先看效果:

 提示:您可以先修改部分代码再运行
[ 本帖最后由 14px 于 2007-10-22 18:33 编辑 ]
从容不易
还不错,收了~ 谢过
原理分析:

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



扩大了就是这样:



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

附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
从容不易
top和bottom这2个div可以去掉吧,能省则省

比图片做法多5个div,不过扩展性好一些,也省掉了hack

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
再看源码:
html:
复制内容到剪贴板
代码:
<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>
css:
复制内容到剪贴板
代码:
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;
}
[ 本帖最后由 14px 于 2007-10-22 18:34 编辑 ]
从容不易

TOP

引用:
原帖由 Ellis 于 2007-10-22 18:07 发表
top和bottom这2个div可以去掉吧,能省则省
请接着看,它们的存在是有重要作用的。
从容不易

TOP

呵呵,有创意。不过真的做起来,还是图片好

TOP

接下来,说说它的价值

看过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;
}
效果如下:

 提示:您可以先修改部分代码再运行
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;
}
效果如下:

 提示:您可以先修改部分代码再运行
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;
}
效果如下:

 提示:您可以先修改部分代码再运行
6. 可以存在于任意背景中。

因为是模拟的像素图,所以多余的部分都是全透明的,大家试着修改一下body的background就行了。

7. html结构清晰。

这个纯属个人看法。

[ 本帖最后由 14px 于 2007-10-22 18:29 编辑 ]
从容不易

TOP

同样的思路,扩展一下。
这个也是……为了符合标题......画圈圈....

 提示:您可以先修改部分代码再运行
从容不易

TOP

还不如用图片,只要4个层,也能做到很不错的扩展性(不限大小)。唯一的麻烦就是样式和颜色

TOP

l楼主是好人啊 支持

TOP

好神奇啊!楼主辛苦了!

TOP

很有思路,不过废div太多了。个人觉得背景方便而且好看而且代码整洁

TOP

技术很好
但我还是喜欢用图片

TOP

等IE6完全过时后,png就索王道了,灭哈哈哈哈哈~~

TOP

不喜欢无语义的空标签。

TOP

个人比较喜欢老外写的那个JS,调用后,填写参数能够实现任意角的圆形化....只填参数就行.而且浏览器兼容很好...
专注设计

TOP

引用:
原帖由 14px 于 2007-10-22 18:08 发表


请接着看,它们的存在是有重要作用的。
你还没解释这个重要作用在哪啊

TOP

和拿table画没多大区别了,实用价值有待商榷,尤其是页面用到大量圆角表格的时候,代码量将几何增加。还不如做4个角的图,套4层div来的easy,代码和css都会少很多。

TOP

回答喜欢用图片的朋友,不如我们仔细分析一下。
图片背景法较像素绘制法,在废弃div的数量上要少得多,而且css样式简易,PNG的使用支持半透明,这是目前我所能分析出该方案的优势所在。
然而,
废弃div的数量确实少了,在表现上平行一致的四个角,在源码上却是层层相叠的,源码结构不太清晰,当然,这个影响并不大。
PNG的使用显然是个很明显的优势,圆角将变得非常光滑,但是IE6什么时候完全过时呢?
这样的css确实简单且易于理解,但图片所占的字节远远大于了css多出的字节,页面连接数也会增幅。
而像素绘制法较图片背景法的优势则在于颜色易修改。
在实际运用中,这一点可以增加页面的可维性与可定制性,我坚信,这是相当重要的。
从容不易

TOP

引用:
原帖由 skyverd 于 2007-10-23 08:24 发表
个人比较喜欢老外写的那个JS,调用后,填写参数能够实现任意角的圆形化....只填参数就行.而且浏览器兼容很好...
JS确实强大多了:)
比较而言,我这仅仅只能说是纯样式技术上的探讨。
从容不易

TOP

引用:
原帖由 Ellis 于 2007-10-23 10:39 发表



你还没解释这个重要作用在哪啊
8楼中的第5点。
从容不易

TOP

不错啊!那天用用看
一直奔跑

TOP

一张不到500字节的图片,兼容各浏览器。图片尺寸可大可小,灵活性更高。

 提示:您可以先修改部分代码再运行
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

回复 #22 14px 的帖子

那你可以给上面的每个div加统一class,下面加统一class