站长资源网页制作

CSS圆角边框制作指南与实例

整理:jimmy2025/1/11浏览2
简介使用 CSS 制作圆角边框可能是网页前端设计师们最头痛的问题之一. 圆角边框看似简单, 但实现起来却很不简单, 可能需要复杂的页面结构或大量的边角图片, 方法很多, 但无论哪一种都是难以维护的.CSS 很直观, 但显然不够灵活, 导致页面设计中出现大量冗余代码. 不能使用变量和循环, 若想清除某个

使用 CSS 制作圆角边框可能是网页前端设计师们最头痛的问题之一. 圆角边框看似简单, 但实现起来却很不简单, 可能需要复杂的页面结构或大量的边角图片, 方法很多, 但无论哪一种都是难以维护的.

CSS 很直观, 但显然不够灵活, 导致页面设计中出现大量冗余代码. 不能使用变量和循环, 若想清除某个类型所有属性的值还需要一句一句的清除, 而不是一句完成. 而最令人痛心的莫过于现实圆角边框, 或许以下的代码是我们梦寐以求的:

CSS Code复制内容到剪贴板
  1. .roundbox { round: 3px; } /* 圆角大小为三像素 */  

奈何事与愿违, W3C 里面没有这样的东西. 某些浏览器支持一些特殊的属性可以实现类似功能, 但那并不能得到其他浏览器的支持. WordPress 后台就使用了这样的属性, Firefox 等一些浏览器上显示非常好看, 但 IE 上却惨不忍睹.

为了实现小圆角, 各网站是各出奇招, 什么方法都有. 而我比较喜欢百度知道的实现办法, 因为零图片, 并且易于控制, 因为圆角部分是在 box 外部, 随时可以无害删除.

百度知道的方法借用了 div 在 float:none 时占用全行的特性, 在 box 上方和下方各都放置几个 div, 并对这些 div 设置背景色, 边框和外边距. 也就是说, 我们只要固定了外层的宽度, 其他的就不需要操心了. 我模仿百度知道的样式做了一个例子, 效果可以参考一下右边的截图. 实现代码如下:

CSS Code复制内容到剪贴板
  1. <div style="margin:0 4px; background:#B0BEC7; height:1px; overflow:hidden;"></div>   
  2. <div style="margin:0 2px; border:1px solid #B0BEC7; border-width:0 2px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  3. <div style="margin:0 1px; border:1px solid #B0BEC7; border-width:0 1px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  4. <div style="margin:0 1px; border:1px solid #B0BEC7; border-width:0 1px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  5. <div style="background:#E1E7E9; border:1px solid #B0BEC7; border-width:0 1px;">   
  6.  <div style="font-size:12px; font-weight:bolder; font-family:Verdana; color:#258; padding:2px 10px 5px;">   
  7.   Cascading Style Sheets   
  8.  </div>   
  9.  <div style="background:#FFF; margin:0 3px; font-size:11px; font-family:Verdana; color:#333; padding:5px 10px; overflow:hidden;">   
  10.   Cascading Style Sheets (CSS) is a simple mechanism for adding style (e.g. fonts, colors, spacing) to Web documents. Tutorials, books, mailing lists for users, etc.   
  11.  </div>   
  12. </div>   
  13. <div style="margin:0 1px; border:1px solid #B0BEC7; border-width:0 1px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  14. <div style="margin:0 1px; border:1px solid #B0BEC7; border-width:0 2px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  15. <div style="margin:0 2px; border:1px solid #B0BEC7; border-width:0 2px; background:#E1E7E9; height:1px; overflow:hidden;"></div>   
  16. <div style="margin:0 4px; background:#B0BEC7; height:1px; overflow:hidden;"></div>   

其中有一点是很重要的, 记得为上下圆角所在的行添加 overflow:hidden 属性, 否则在 IE 中将会相当的恶心.

圆角是实现了, 但并不是完美无瑕的, 边角有锯齿 (下面会介绍小圆角具体的方法可以消灭锯齿, 只要你不嫌麻烦). 为什么不能使用过渡颜色呢? 因为圆角所在的行只能控制背景和边框两处的颜色, 所以不能在同一行搞出比较复杂的颜色过渡. 因为颜色被限制了, 所以圆角的大小也被限制了 (有锯齿的圆角太大会显得很难看), 如果你的 box 有边线, 圆角大小建议不要超过 4 个像素, 如果没边线, 也不要超过 6 个像素. 有更大的圆角需要最好还是采用图片, 处理简单又方便.

访问过腾讯问问的朋友可能会发现, 它的样式是抄袭百度知道的. 但你知道吗? 其实它的圆角效果是使用图片实现的. 有兴趣的朋友可以去研究一下.


纯代码实现的小圆角

以下是我个人的一点建议, 希望对你有帮助.

什么时候使用纯代码制作圆角边框?

你驱使代码的能力胜于图形.
你追求更快的网页显示速度, 就算是微乎其微的差别.
在模板或主题中使用.
什么时候使用图片制作圆角边框?

你驱使图形的能力胜于代码.
你不在乎所差不几的网页显示速度, 更注重直观和维护方便.
在文章或其它动态内容中使用.

其实也很简单, 下面分析一下, 或许以后会有用.

1. 做一个直角的 DIV, 给他画上边框. (以下图片都以左上角为例)
CSS圆角边框制作指南与实例

2. 在 DIV 内部画第二个 DIV, 背景色与页面背景颜色相同.
CSS圆角边框制作指南与实例

3. 将第二个 DIV 挪到边界上, 使它能与页面背景连接, 这样看上去就像一个缺角的框框.
CSS圆角边框制作指南与实例

4. 在第二个 DIV 内画第三个 DIV, 在这里其实就是一点.
CSS圆角边框制作指南与实例

5. 将第三个 DIV 挪到右下角的位置, Done.
CSS圆角边框制作指南与实例

主要步骤讲解了以后来看一个完整的例子:

CSS Code复制内容到剪贴板
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
  2.   
  3. <html xmlns="http://www.w3.org/1999/xhtml">   
  4. <head profile="http://gmpg.org/xfn/11">   
  5.  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
  6.  <title>纯 CSS 打造圆角</title>   
  7.   
  8.  <style>   
  9. <!--   
  10. body {   
  11.  padding-top:200px;   
  12. }   
  13.   
  14. /* 框 */  
  15. #sg-feedback {   
  16.  background:#EFF7CE;   
  17.  border:1px solid #9ECD62;   
  18.  font-size:12px;   
  19.  margin:0pt auto;   
  20.  text-align:center;   
  21.  width:200px;   
  22. }   
  23. #sg-feedback div .dot {   
  24.  background:#9ECD62;   
  25. }   
  26. #sg-feedback .inner {   
  27.  margin:5px 0pt;   
  28. }   
  29.   
  30. /* 上边角 */  
  31. .yshp_rnd .rnd_top * {   
  32.  display:block;   
  33.  background:#FFFFFF;   
  34.  overflow:hidden;   
  35. }   
  36. .yshp_rnd .rnd_top * * {   
  37.  background:#DE650A;   
  38. }   
  39. .yshp_rnd {   
  40.  position:relative;   
  41. }   
  42. .yshp_rnd .rnd_top .west {   
  43.  position:absolute;   
  44.  height:2px;   
  45.  left:-1px;   
  46.  top:-1px;   
  47.  width:2px;   
  48. }   
  49. .yshp_rnd .rnd_top .west .dot {   
  50.  position:relative;   
  51.  height:1px;   
  52.  left:1px;   
  53.  top:1px;   
  54.  width:1px;   
  55. }   
  56. .yshp_rnd .rnd_top .east {   
  57.  position:absolute;   
  58.  height:2px;   
  59.  rightright:-1px;   
  60.  top:-1px;   
  61.  width:2px;   
  62. }   
  63. .yshp_rnd .rnd_top .east .dot {   
  64.  position:relative;   
  65.  height:1px;   
  66.  left:0pt;   
  67.  top:1px;   
  68.  width:1px;   
  69. }   
  70.   
  71. /* 下边角 */  
  72. .yshp_rnd .rnd_bot * {   
  73.  display:block;   
  74.  background:#FFFFFF;   
  75.  overflow:hidden;   
  76. }   
  77. .yshp_rnd .rnd_bot * * {   
  78.  background:#DE650A;   
  79. }   
  80. .yshp_rnd .rnd_bot .west {   
  81.  position:absolute;   
  82.  bottombottom:-1px !important;   
  83.  bottombottom:-2px;   
  84.  height:2px;   
  85.  left:-1px;   
  86.  width:2px;   
  87. }   
  88. .yshp_rnd .rnd_bot .west .dot {   
  89.  position:relative;   
  90.  height:1px;   
  91.  left:1px;   
  92.  top:0pt;   
  93.  width:1px;   
  94. }   
  95. .yshp_rnd .rnd_bot .east {   
  96.  position:absolute;   
  97.  bottombottom:-1px !important;   
  98.  bottombottom:-2px;   
  99.  height:2px;   
  100.  rightright:-1px;   
  101.  width:2px;   
  102. }   
  103. .yshp_rnd .rnd_bot .east .dot {   
  104.  position:relative;   
  105.  height:1px;   
  106.  left:0pt;   
  107.  top:0pt;   
  108.  width:1px;   
  109. }   
  110. -->   
  111.  </style>   
  112. </head>   
  113.   
  114. <body>   
  115.  <div id="sg-feedback" class="yshp_rnd">   
  116.   
  117.   <div class="rnd_top">   
  118.    <div class="west">   
  119.     <div class="dot"></div>   
  120.    </div>   
  121.    <div class="east">   
  122.     <div class="dot"></div>   
  123.    </div>   
  124.   </div>   
  125.   
  126.   <div class="inner">Hello, World!</div>   
  127.   
  128.   <div class="rnd_bot">   
  129.    <div class="west">   
  130.     <div class="dot"></div>   
  131.    </div>   
  132.    <div class="east">   
  133.     <div class="dot"></div>   
  134.    </div>   
  135.   </div>   
  136.   
  137.  </div>   
  138. </body>   
  139. </html>  

最终效果如下图所示:
CSS圆角边框制作指南与实例