css3中圆角和阴影的实验

主题折腾了不少东西,又看到了很多问题,尤其是IE,全系列全部不支持CSS3,唉,实在不行的话只能妥协用图片了。无奈~~在CSS3里面比较常 用的是 border-radius(圆角)和 box-shadow(阴影)。而关于这两个一起用会出现啥,一直没有遇到过。

昨天在 A-shun 那里看到了一点 chrome 下关于css3的小bug,border-radius和box-shadow一起用会溢出来四个边角。我一直在用chrome,所以对这个问题很好奇 哈,遂求教于万能的互联网,终于发现这个问题果然是存在的。

首先:这篇文章是翻译的,来自这里—-【传送门】。下 面是正文。

在他(原作者)创建 DeCal 的过程中, 为了增强视觉效果,使用了一些CSS3的渲染技术。主要包括了3个:box-shadow 、border-radius 和 RGBa 。

有趣的是不同浏览器对这些渲染技术的支持情况。像3.6+ 和 Opera 10.5+这些浏览器,是灰常有前途滴;但另外一些,诸如 Safari 和 Chrome,在支持上就不那么完整或者说,是有漏洞的。在他创建的这个日历视图上来看,他在按钮上使用了如上全部3个渲染效果。下面的是原本为橙色按钮 测试有关的CSS:

#cal td.smd_cal_event span a {
 background: #fab102;
 padding: 4px 10px 5px 10px;
 border: 1px solid #fff;
 border-bottom: 1px solid #363d50;
 -moz-border-radius: 10px;
 -webkit-border-radius: 10px;
 border-radius: 10px;
 -moz-box-shadow:
  inset 0 4px 7px 0 #fff25f,
  inset 0 -2px 4px 0 rgba(255, 242, 94, 0.4),
  inset 0 -4px 8px 0 rgba(207, 75, 3, 0.9),
  0 2px 4px 0 rgba(0, 0, 0, 0.4);
 -webkit-box-shadow:
  inset 0 4px 7px 0 #fff25f,
  inset 0 -2px 4px 0 rgba(255, 242, 94, 0.4),
  inset 0 -4px 8px 0 rgba(207, 75, 3, 0.9),
  0 2px 4px 0 rgba(0, 0, 0, 0.4);
 box-shadow:
  inset 0 4px 7px 0 #fff25f,
  inset 0 -2px 4px 0 rgba(255, 242, 94, 0.4),
  inset 0 -4px 8px 0 rgba(207, 75, 3, 0.9),
  0 2px 4px 0 rgba(0, 0, 0, 0.4);
 }

我们从一些简单的 background color和padding的语法开始,逐步地添加一些top/bottom border的定义,之后是为各种浏览器引擎使用的border-radius(圆角效果)(定义起来很烦人),之后是为各种浏览器引擎使用的繁杂的 box-shadows(唉,真是浪费带宽哪!)。我们在视觉方面,为CSS写了冗长的代码,但是做这些显然要比直接用一个背景图片要划算的多。(为便于 比较,以上的CSS代码大约有700 bytes大;但是等效的背景图片很轻易地就达到6-7k,另外还得加上HTTP请求。)

下面有一个放大的细节图,显示在windows系统下,以上代码在五种浏览器中的显示效果:

正如你所看到的,不同的浏览器支持效果差异很大。IE7啥都不识别(杯具一个)。其他几个毫无疑问都支持border-radius圆角效果;在像 素等级上他们几乎都是相同的。有一个细微的差别是顶部和底部的边框在底部曲线那里是混合的,在我看来,Firefox 3.6在绘制曲线上表现的最出色,背景颜色和边框颜色上,Opera 10.5的表现紧随其后。

各种浏览器对CSS3的box-shadow支持情况

关于CSS3最爽的一件事是可以为每一个DOM元素定义同一款式的多变样式。多重的背景效果确实很棒。但是多变的box-shadows同样很好, 因为它使复杂的梯度设计,就像我所设计按钮的斜面,完全不需要任何图片。总结CSS,第一个inset语句显示的是顶部的高亮黄色阴影,第二个inset 显示的是其下部的微黄阴影。第三个inset是整个按钮显示出来的深橙色阴影。最后一个是元素的外阴影。。

测试结果很有趣。根据源代码所显示的效果来看,Safari啥都不支持。但是,如果你把外阴影放到inset规则之前,并且取出最后一条语句(定义 的是延伸的阴影),像下面这样 …

-webkit-box-shadow:
 0 2px 4px rgba(0, 0, 0, 0.4),
 inset 0 4px 7px 0 #fff25f,
 inset 0 -2px 4px 0 rgba(255, 242, 94, 0.4),
 inset 0 -4px 8px 0 rgba(207, 75, 3, 0.9);

… 外部阴影又起作用了。所以Safari渲染RGBa还可以,但是目前还不支持inset box-shadows(内阴影)。

Chrome就更有趣了( A-shun 遇到的状况)。由于它使用了Webkit来定义,尝试去创建正确的内阴影,但是产生了渲染错误(这些方形的边角明显伸出了边界),而不像其兄弟 Safari啥也不做。删除inset语句可以修复它,但是显示效果就是一般的平面按钮了。这些,在不断进步精神的指引下,将是现在所要做的。3lian.com (值得注意的是,chrome的外阴影表现也不尽如人意;它需要至少4px,这个明显有点陈旧。)

Opera 10.5 和 Firefox 3.6 在这个项目上明显是胜者。两者都产生了平滑的按钮并且没有渲染错误,并且 非常平滑,很好的渐变阴影远远超过了定义4px来产生一个Photoshop质量的效果。在这两者之间,Firefox的渲染效果稍微好了那么一点点,它 的内部效果分布更加均匀。我在这里严重推荐这俩浏览器,因为它们俩比其他浏览器出色太多了。至少目前如此。

时间: 2024-09-17 17:46:46

css3中圆角和阴影的实验的相关文章

让IE6、IE7、IE8支持CSS3的圆角、阴影样式

想做个页面用到css3的圆角和阴影效果,但ie浏览器不支持,之前也听说有插件可以实现,周六在网上找到了一个方法,原文如下: 但凡是前端工程师,都知道IE6,IE7,IE8不支持.或者不完全支持CSS3的属性. CSS3 有很多很强大.绚丽的效果,比如,圆角,阴影,渐变透明,渐变背景,等等. 因为IE6时代,没有什么标准,而因为各种原因,IE6用户几乎不会更新IE版本. 让IE6,IE7,IE8支持CSS3效果,有一个思路就是利用 VML 模拟. VML是The Vector Markup Lan

css3中Border

从我开始学做网页的时候起,页面上用到的圆角都是头痛的事情,最初是用表格,三行三死,然后把圆角图片切成9块分别填充,呵呵,现在想起来无语. 后面网上又找了css圆角代码,1像素1像素的把圆角拼出来,这时候,我开始懒了,用了几次,当时就无语了. 如今,我更懒了,遇见圆角效果,就做成图片用CSS设置成背景,方便快捷. css3来了,这里有一项新的技术,圆角的效果让我们从此不再忧愁(别急!css3还未正式发布),现在就让我们先睹为快,了解下css3中这一强大的技术:border-radius吧. css

IE浏览器中CSS3圆角和阴影方法

border-radius属性 CSS3圆角只需设置一个属性:border-radius(含义是"边框半径").你为这个属性提供一个值,就能同时设置四个圆角的半径.所有合法的CSS度量值都可以使用:em.ex.pt.px.百分比等等. 比如,下面是一个div方框: 现在设置它的圆角半径为15px: border-radius: 15px; 这条语句同时将每个圆角的"水平半径"(horizontal radius)和"垂直半径"(vertical

使用CSS3实现圆角,阴影,透明

  CSS实现圆角,阴影,透明的方法很多,传统的方法都比较复杂,用CSS3就方便很多了,虽然现在各浏览器对CSS3的支持还不是很好,但不久的将来CSS3就会普及. 1.圆角 CSS3实现圆角有两种方法. 第一种是背景图像,传统的CSS每个元素只能有一个背景图像,但是CSS3可以允许一个元素有多个背景图像.这样给一个元素添加4个1/4圆的背景图像,分别位于4个角上就可以实现圆角了. 代码如下: .box { /* 首先定义要使用的4幅图像为背景图 */ background-image: url(

实现CSS3中的border-radius(边框圆角)示例代码

详细介绍下如何实现CSS3中的border-radius(圆角),具体代码如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助   实现边框圆角 -moz-border-radius: 32px; -webkit-border-radius: 32px; border-radius: 32px; behavior: url(border-radius.htc);   复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/

利用CSS3实现圆角的outline效果的教程

  一.首先,outline是个很牛的东西 1. border近亲 outline和border是近亲,为什么这么讲呢?首先,都是给元素外面套框框的;其次,支持的属性值几乎都是一样的,例如,outline-style和border-style值dotted, dashed, solid, ...之类的,一些语法也几乎一样.如果这都不算近亲,你让绝对定位和浮动何言以对. 2. IE8+支持 outline严格来讲属于CSS3属性,但是IE8+浏览器就支持了.外挂一句,IE9+浏览器的outline

兼容低版本浏览器的css3 中border-radius和box-shadow(使用文件ie-css3.htc)

推荐一个文件,用来解决css3中border-radius和box-shadow(两个经常用的)   1.border-radius 边框圆角 静态页中经常要求出现某个背景是圆角的,这个时候就要用如下代码,可以很好解决低版本不兼容的问题     (文件ie-css3.htc放在了根目录下)   2.box-shadow 盒子阴影 ,背景添加阴影,使页面更加具有立体感,也是静态页中经常出现的问题,(颜色只支持#000)     上面这两个是这几天经常碰到的,写出来分享

CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow<length>①: 第1个长度值用来设置对象的阴影水平偏移值.可以为负值 <length>②: 第2个长度值用来设置对象的阴影垂直偏移值.可以为负值 <length>③: 如果提供了第3个长度值则用来设置对象的阴影模糊值.不允许负值 <color>: 设置对象的阴

CSS3教程:网页文字阴影属性text

文章简介:文字阴影在很多设计中都有应用,在过去我们只能通过图片来实现在Web上显示文字阴影,但是这样做对不太利于SEO,所以在CSS3中,text-shadow又恢复了其属性(text-shadow属性是CSS3中定义的,在CSS2.1中删除了). 文字阴影在很多设计中都有应用,在过去我们只能通过图片来实现在Web上显示文字阴影,但是这样做对不太利于SEO,所以在CSS3中,text-shadow又恢复了其属性(text-shadow属性是CSS3中定义的,在CSS2.1中删除了). text-