【基础】CSS实现多重边框的5种方式

原文:【基础】CSS实现多重边框的5种方式

简言

目前最优雅地实现多重边框的方案是利用CSS3box-shadow属性,但如果要兼容老的浏览器,则需要选择其它的方案。本文简要地列举了几种多重边框的实现方案,大家可以根据项目实际及兼容性要求等情况,选择最适合的实现方案。

1 利用描边(outline)属性

方案1利用描边(outline)属性结合border属性实现双重边框。此方案实现简单,兼容性好,能兼容除IE6,7以外的浏览器。

1.1 核心代码

.borders {
  border: solid 6px #fff;
  outline: solid 6px #888;
}

1.2 演示程序

演示程序

1.3 说明

  • 只能实现双重边框
  • 边框样式灵活,可以实现虚线等样式的边框
  • 描边在盒模型之外,会与外部元素发生重叠

2 利用额外的DIV

方案2利用额外的DIV嵌套的方式实现多重边框。这也是唯一不存在兼容性问题的方案。

2.1 核心代码

.outer {
    border: solid 6px #888;
    background: #fff;
}
.inner {
    background: #222;
    margin: 6px;
}

2.2 演示程序

演示程序

2.3 说明

  • 兼容性好
  • 可以实现多重边框,虚线边框等样式
  • 需要额外的DIV元素,增加了代码复杂性

3 利用伪元素

方案3利用伪元素(:before)的方式实现双重边框。实现代码略复杂,属于hack的实现方式,不推荐。

3.1 核心代码

.borders {
    border: solid 6px #fff;
    position: relative;
}
.borders:before {
    content: "";
    position: absolute;
    top: -12px;
    left: -12px;
    right: -12px;
    bottom: -12px;
    border: solid 6px #888;
}

3.2 演示程序

演示程序

3.3 说明

  • IE6,7,8不兼容
  • :after也可以
  • 同时应用:before:after可以实现三重边框

4 利用border-image属性

方案4利用CSS3border-image属性实现多重边框。实现方法简单,但需要制做一个额外的边框图片,兼容性较差。

4.1 核心代码

.borders {
    border: solid 12px transparent;
    border-image: url(‘borders.jpg‘) 12 12 12 12 repeat;
}

4.2 演示程序

演示程序

4.3 说明

本例中,利用border-image-slice将边框图片分成如下图所示的9个区域:

其中包括四个角(1,2,3,4),四条边(5,6,7,8)以及中间区域(9)。

repeat表示四条边都在相应的边框上重复的平铺。

5 利用box-shadow属性

方案5利用box-shadow属性实现多重边框。方案5是最简单,最直接的实现多重边框的方式。只有一行代码就可以实现多重边框效果。利用了阴影(box-shadow)实现边框多少有一些hack的味道。

5.1 核心代码

.borders {
    box-shadow: 0 0 0 6px #fff, 0 0 0 12px #888;
}

5.2 演示程序

演示程序

5.3 说明

为了用阴影模拟边框,本例中使用了两个阴影效果,设置偏移值和模糊值为0,并适当地设置阴影的尺寸,从而实现了双重边框的效果。因为一个阴影重叠在另一个阴影之上,第二个阴影的尺寸要设置成第一个阴影尺寸的两倍。关键部分是将模糊值设成0,从而产生像边框一样的纯色阴影,看起来和边框一样。

和描边(outline)属性一样,box-shadow属性可能会和周边元素发生重叠,因此要适当地设置元素的外边距。box-shadow兼容性一般。

6 参考

MDN border-image

MDN box-shadow

Multiple Borders with CSS

CSS-tricks Multiple Borders

7 结语

本文简述了5种多重边框的实现方式,各有优缺点,大家要根据实际情况进行取舍。

文中所述部分文字及代码汇编于网络。因时间不足,能力有限等原因,存在文字阐述不准及代码测试不足等诸多问题。

原文地址:https://www.cnblogs.com/lonelyxmas/p/8994443.html

时间: 2025-01-01 11:52:03

【基础】CSS实现多重边框的5种方式的相关文章

CSS实现多重边框和内凹圆角

CSS实现多重边框 1 <!DOCTYPE html> 2 <html lang="zh-cn"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>CSS实现多重边框</title> 6 <style> 7 div { 8 width: 100px; 9 height: 150px; 10 margin: 40px auto; 11 text-a

【css】清除浮动的几种方式

[css]清除浮动的几种方式 因为浮动框不在普通的文档流中,所以它不占据空间.如下面的代码: 1 .news { 2 background-color:gray; 3 border:1px solid black; 4 } 5 .news img { 6 float:left; 7 } 8 .news p { 9 float:right; 10 } 11 <divclass="news"> 12 <imgsrc="/img/news-pic.jgp"

大数据基础教程:创建RDD的二种方式

大数据基础教程:创建RDD的二种方式 1.从集合中创建RDD val conf = new SparkConf().setAppName("Test").setMaster("local")      val sc = new SparkContext(conf)      //这两个方法都有第二参数是一个默认值2  分片数量(partition的数量)      //scala集合通过makeRDD创建RDD,底层实现也是parallelize      val 

CSS揭秘—多重边框(二)

前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度较慢.下面示例代码是我自己写的,若有错误,欢迎指正 注:我会在每个示例最后附上书中提供的在线示例代码链接:在最开头附上每个相关示例所需CSS属性链接作为补充,以供查阅和学习 CSS需知: box-shadow outline 场景: 如果让你实现下图多重边框的效果,你会怎么做呢? 可能聪明的你首先想到利用 o

CSS中清除浮动的两种方式

在CSS中,父元素中的子元素如果使用了float,会导致父元素塌陷,高度为0. 对于这种情况,常见的解决方式有两种. 一.增加新的div,应用clear:both属性 html: 1 <div class="father"> 2 <div class="div1">1</div> 3 <div class="div2">2</div> 4 <div class="div3

CSS原生实现下拉列表的两种方式

CSS伪类的一个非常重要的应用就是下拉菜单. 最近在学习中发现网上纯粹用CSS实现的下拉菜单主要有两种思路:一种是通过visibility属性的切换,另一种是基于display属性的切换.二者在大体的结构上是一致的,只是对于二级子菜单的隐藏和显示的实现策略上有所不同. 下拉菜单的HTML代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh

CSS中水平居中设置的几种方式

1.行内元素: 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align:center 来实现的. <body> <div class="txtCenter">我想要在父容器中水平居中显示.</div> </body> <style> .txtCenter{ text-align:center; } </style> 2.块状元素: 当被设置元素为 块状元素 时用 text-alig

CSS等高布局的6种方式

目录 [1]边框模拟[2]负margin[3]table[4]absolute[5]flex[6]js 前面的话 等高布局是指子元素在父元素中高度相等的布局方式.等高布局的实现包括伪等高和真等高,伪等高只是看上去等高而已,真等高是实实在在的等高.本文将介绍边框模拟.负margin这两种伪等高以及table实现.absolute实现.flex实现和js判断这四种真等高布局 伪等高 边框模拟 因为元素边框和元素高度始终是相同高度,用元素的边框颜色来伪装左右两个兄弟元素的背景色.然后将左右两个透明背景

CSS全屏布局的5种方式

× 目录 [1]float [2]inline-block [3]table[4]absolute[5]flex[6]总结 前面的话 全屏布局在实际工作中是很常用的,比如管理系统.监控平台等.本文将介绍关于全屏布局的5种思路 思路一: float [1]float + calc 通过calc()函数计算出.middle元素的高度,并设置子元素高度为100% <style> body,p{margin: 0;} body,html,.parent{height: 100%;} .middle{