CSS Border使用小分享

作者:乔花 来源:taobao.com UED Team 时间:2010-08-12 14:34:00 

之前在懒懒分会上分享的一点关于border画小图的内容, 完整的ppt在这里.

原理

css盒模型

  • 一个盒子包括: margin+border+padding+content

  • – 上下左右边框交界处出呈现平滑的斜线. 利用这个特点, 通过设置不同的上下左右边框宽度或者颜色可以得到小三角, 小梯形等.

  • – 调整宽度大小可以调节三角形形状.



示例1

一般情况下, 我们设置盒子的宽高度, 及上下左右边框, 会呈现如下图

#test1 {    height:20px;    width:20px;    border-color:#FF9600 #3366ff #12ad2a #f0eb7a;    border-style:solid;    border-width:20px;}


示例2

在上面基础上, 我们把宽高度都设为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种颜色设置为透明(或者设置为和背景色相同的颜色), 那不就出现一个小三角了么


示例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下边框透明的文章中找到解决办法, 如下例


示例4

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下, 不设置透明, 将其颜色设置为背景色, 使其看不出来也是可以的.


示例5

上面我们画的小三角的斜边都是依靠原来盒子的边, 还有另外一种形式的小三角, 就是斜边在盒子的对角线上

#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绝对定位来实现, 见示例.




应用之圆角生成

  • 应该说是近似圆角,,其实由一个高度非常小的梯形展示出来

  • - 上梯形(无上边框,下左右3px宽度, 左右颜色去掉)+矩形+下梯形


  • 自适应圆角1:

  • - 整个rc设置为float: left 或 display: inline-block 分为top,bd,bottom, top中又有两个层rc1和rc2, rc1只设置border-top, 高度为0, 并设置左右margin呈短小的一横线, rc2只设置左右border并且左右margin小于rc1, height为1px, 中间bd设置左右border,不设置左右margin;

  • - 不过 IE 6&7 出现 bug:rc在IE6中依然显示为dispaly:block,而IE7中top 和 bottom缩成一坨,不肯扩展开来,而在rc1/rc2/rc3 中插入文字xxx后只能扩展到文字宽度,不能与bd对齐.

  • - 见自适应圆角1

  • 自适应圆角2

  • - 自 Google 系产品的 1px 圆角按钮,,,三层div, 最外层div1正常设置边框宽度1px, 呈现出上下边框线, 中间div2只设置左右边框, 且把左右margin设置成负值, 呈现出圆角处的4个圆点 内层div3同样只设置左右边框, 同时margin上下空出div2的高度, margin左右也设置与div2相同的负值.

  • - 见自适应圆角2


其他小问题

  • - 透明:

  • IE6浏览器不支持transparent透明属性,就border生成三角技术而言,直接设置对应的透明边框的border-style属性为dotted或是dashed即可解决这一问题,原因是在IE6下, 点线与虚线均以边框宽度为基准,点线长度必须是其宽度的3倍以上(height>=border-width*3),虚线宽长度必须是其宽度的5倍以上(height>=border-width*5),否则点线和虚线都不会出现.


  • - IE6的奇偶bug:

  • 如果定位外框高度或是宽度为奇数,则IE6下,绝对定位元素的低定位和右定位会有1像素的误差.所以,尽量保证外框的高度或宽度为偶数值.


  • - IE6的空div高度bug:

  • IE6下,空div会有莫名的高度,也就是说height:0;不顶用,此时形成的尖角的实际占高于其他浏览器是有差异的.可使用font-size:0; + overflow:hidden;修复此问题.


  • - filter: chroma滤镜

  • 该属性属性可以设置一个对象中指定的颜色为透明色, 如:

  • border-color: pink;filter: chroma(color=pink);



参考资料

  1. CSS小三角原理

  2. CSS气泡效果

  3. IE6下边框透明原理解析

  4. CSS3实现的机器猫图形

标签:border,CSS,边框
0
投稿

猜你喜欢

  • Oracle截取字符串去掉字段末尾指定长度的字符

    2024-01-23 00:57:51
  • Python基于socket实现TCP客户端和服务端

    2023-09-29 15:30:05
  • python文件及目录操作代码汇总

    2022-08-19 14:07:27
  • SQL Server 中的数据类型隐式转换问题

    2024-01-16 21:05:38
  • ASP中RegExp对象正则表达式语法及相关例子

    2007-08-12 17:46:00
  • Joomla开启SEF的方法

    2024-04-30 08:47:39
  • 用Python抢火车票的简单小程序实现解析

    2023-09-06 06:31:28
  • MySQL因大事务导致的Insert慢实例分析

    2024-01-22 22:07:54
  • 详解字典树Trie结构及其Python代码实现

    2023-07-07 18:18:41
  • Python打印“菱形”星号代码方法

    2023-02-05 17:34:42
  • asp 得到动态数组中元素的个数

    2011-03-30 10:55:00
  • 使用python进行文本预处理和提取特征的实例

    2022-07-13 21:25:47
  • django连接oracle时setting 配置方法

    2021-08-23 15:20:13
  • php ajax异步读取rss文档数据

    2023-10-17 19:59:02
  • 使用python无账号无限制获取企查查信息的实例代码

    2021-09-23 20:26:10
  • 在Python中执行系统命令的方法示例详解

    2022-10-24 05:32:27
  • Vue router安装及使用方法解析

    2023-07-02 16:50:00
  • python 用opencv调用训练好的模型进行识别的方法

    2022-11-14 11:57:23
  • 在Mac中PyCharm配置python Anaconda环境过程图解

    2023-10-19 01:22:53
  • Python 写入训练日志文件并控制台输出解析

    2021-10-11 01:27:10
  • asp之家 网络编程 m.aspxhome.com