标签:style blog http io ar color os 使用 sp
之前在懒懒分会上分享的一点关于border画小图的内容, 完整的ppt在这里.
一般情况下, 我们设置盒子的宽高度, 及上下左右边框, 会呈现如下图
#test1 { height:20px; width:20px; border-color:#FF9600 #3366ff #12ad2a #f0eb7a; border-style:solid; border-width:20px; }
在上面基础上, 我们把宽高度都设为0时, 会呈现上述的边界斜线.
#test2 { height:0; width:0; overflow: hidden; /* 这里设置overflow, font-size, line-height */ font-size: 0; /*是因为, 虽然宽高度为0, 但在IE6下会具有默认的 */ line-height: 0; /* 字体大小和行高, 导致盒子呈现被撑开的长矩形 */ border-color:#FF9600 #3366ff #12ad2a #f0eb7a; border-style:solid; border-width:20px; }
这时, 其实我们已经看到有上下左右四个三角形了..如果, 我们把4种颜色, 只保留一种颜色, 余下3种颜色设置为透明(或者设置为和背景色相同的颜色), 那不就出现一个小三角了么
只保留上面的橙色, 看看
#test3 { height:0; width:0; overflow: hidden; font-size: 0; line-height: 0; border-color:#FF9600 transparent transparent transparent; border-style:solid; border-width:20px; }
可是, IE6下不支持透明啊~~~, 会出现下图的样子
找到一个在IE6下边框透明的文章中找到解决办法, 如下例
IE6下, 设置余下三条边的border-style为dashed,,,即可达到透明的效果~ 具体原因可以见参考资料3
#test4 { height:0; width:0; overflow: hidden; font-size: 0; line-height: 0; border-color:#FF9600 transparent transparent transparent; border-style:solid dashed dashed dashed; border-width:20px; }
当然, 在IE6下, 不设置透明, 将其颜色设置为背景色, 使其看不出来也是可以的.
上面我们画的小三角的斜边都是依靠原来盒子的边, 还有另外一种形式的小三角, 就是斜边在盒子的对角线上
#test5 { height:0; width:0; overflow: hidden; font-size: 0; line-height: 0; border-color:#FF9600 #3366ff transparent transparent; border-style:solid solid dashed dashed; border-width:40px 40px 0 0 ; }
保留其中一种颜色, 就可以得到斜边在对角线上的三角形了…多个这样的三角形, 通过设置边框大小, 颜色, 拼凑起来可以形成任意形状的三角形.
像这种不规则的三角形, 延伸一下, 放在气泡框上, 就可以省去拼背景图片的麻烦了.
另外, 关于气泡框, 可以使用棱形字符(◆)来实现, 设置其font-size, 颜色和背景色一致, 定位可以使用margin负值和absolute绝对定位来实现, 见示例.
border-color: pink; filter: chroma(color=pink);
通过上面给力的文章,我们了解到使用css制作兼容的小三角。
但是日常的小三角哪有这么简单呢?例如我们的一个下拉菜单,里面有一个小三角行的,小三角行有蓝色边框,底色为白色。这就需要运用两个小三角来制作定位了。
通常设置上面的ul相对于上面的li为position:absolute;
这两个的小三角行则是通过伪元素来制作,同时通过一些标签来兼容IE6和IE7的。如:
.header .menu ul:before,.header .menu ul .before { display:inline-block; width:0; height:0; overflow:hidden; line-height:0; font-size:0; vertical-align:middle; border-bottom:7px solid #0088CC; border-top:0 none; border-left:7px dashed transparent; border-right:7px dashed transparent; _color:#FF3FFF; _filter:chroma(color=#FF3FFF); content:""; left:37px; position:absolute; top:-7px } .header .menu ul:after,.header .menu ul .after { display:inline-block; width:0; height:0; overflow:hidden; line-height:0; font-size:0; vertical-align:middle; border-bottom:6px solid #ffffff; border-top:0 none; border-left:6px dashed transparent; border-right:6px dashed transparent; _color:#FF3FFF; _filter:chroma(color=#FF3FFF); content:""; left:38px; position:absolute; top:-6px }
同时我还发现了一个bug,那就是在IE6下面当隐藏UL,然后鼠标经过LI时显示时小三角不显示了,不知道是什么原因,我通过给UL直接设置为visibility:hidden而不是display:none,如果你也遇到同样的情况,希望这个发现能够对你有用,如果你无视IE6、IE7,那么就直接用伪元素吧。什么hack都不用。
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/cyweb/p/4120742.html