技巧2: 多重边框

前面的话

怎样给一个盒子添加多个边框?很多人可能是这样解决的:用多个的元素来模拟多重边框。这样确实可以解决问题,但是我们有更好的解决方法。

box-shadow方案

css3的新增属性,大多数人都用过这个属性来生成阴影。那如何使用box-shadow属性给元素添加多重边框呢?

box-shadow用法

先来看看w3c对box-shadow属性的介绍:

[定义和用法]

box-shadow 属性向框添加一个或多个阴影。

[语法]

box-shadow: h-shadow v-shadow blur spread color inset;

[属性值描述]

描述
h-shadow必需。水平阴影的位置。允许负值。
v-shadow必需。垂直阴影的位置。允许负值。
blur可选。模糊距离。
spread可选。阴影的尺寸。
color可选。阴影的颜色。
inset可选。将外部阴影 (outset) 改为内部阴影
实例

了解这个属性的用法之后,我们来看一个例子:

div {
            width: 100px;
            height: 100px;
            margin: 100px auto;
            background: yellowgreen;
            box-shadow: 0 0 0 10px #655 ;
     } 

得到的结果是这样的:
在这里插入图片描述

这里将box-shadow属性的值设置为:两个零偏移量和一个零模糊值加上一个正值的阴影尺寸10px,得到的阴影就像一道实线的边框。

你可能你会觉得这有什么,直接使用border属性也可以生成一个完全一样的边框效果。

逗号分隔

下面就要说一说box-shadow的好处,它支持逗号分隔语法,我们可以创建任意数量的阴影。

因此我们可以很轻松的在上面的实例中再添加一道deeppink颜色的边框。

   box-shadow: 0 0 0 10px #655, 0 0 0 15px deeppink;

在这里插入图片描述
可以看到,在颜色为#655的边框外又增加一道5px颜色为deeppink的边框。

我们可以发现box-shadow是层层叠加的,第一层投影位于最顶层,以此类推。因此,你需要按此规律调整扩张的阴影半径。

如果你愿意,可以在这些边框的底下再加上一层常规的阴影:

    background: yellowgreen;
    box-shadow: 0 0 0 10px #655,
                0 0 0 15px deeppink,
                0 2px 5px 15px rgba(0,0,0,.6);
与border的区别
  • border属性没有办法设置多重边框
  • box-shadow不会影响布局,也不会受到box-sizing属性的影响。不过我们还是可以通过inset或者outset属性值(阴影是内嵌还是外扩)来额外模拟出边框所需要占据的空间。
  • 上述方法所创建的“假边框”出现在元素的外圈,它们并不会响应鼠标事件,比如悬停或点击。
outline方案
outline用法

先看看w3c对outline属性的介绍

[定义与用法]

outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。

注意: 轮廓线不会占据空间,也不一定是矩形。

[属性描述]

描述
outline-color规定边框的颜色。
outline-style规定边框的样式。
outline-width规定边框的宽度。
inherit规定应该从父元素继承 outline 属性的设置。

如果不设置其中的某个值,也不会出问题,比如 outline:solid #ff0000; 也是允许的。

了解属性用法后可以看出,outline属性只适合两层边框的情景,先设置一层常规边框,再加上outline属性来产生外层的边框。这种方法的优点在于边框样式十分灵活,不想box-shdow只能模拟实线边框。

实例

看一个例子:

 div {
            width: 100px;
            height: 100px;
            background: yellow;
            border: 10px solid #655;
            outline: 5px  solid deeppink;
        }

在这里插入图片描述

改变边框样式为dashed,外边框变为虚线:

   outline: 5px  dashed deeppink;

在这里插入图片描述

使用负值的outline-offset后,可以使得描边出现在元素内部:

outline-offset: -20px;

在这里插入图片描述

总结

上面介绍的两种方法各有个的好处.

  • 如果想给元素添加多层边框使用box-shadow来模拟实现
  • 如果只需要两层边框,使用outline属性来描边更好。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值