border

边框是我们美化网页、增强样式最常用的手段之一。例如:

<div class="text"></div>
.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 10px solid #B189BB;
}

但有些时候,我们的需求是给一个容器加上多重边框,最容易想到的是给它多加一层标签:

<div class="text-outborder">
<div class="text"></div>
</div>
.text-outborder {
width: 274px;
height: 274px;
border: 10px solid #F26460;
} .text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 10px solid #B189BB;
}

不过有些时候,我们可能无法修改结构,或者修改结构的成本很高,此时就需要我们在纯 CSS 层面解决这个问题。

outline

这时候可以通过 outline 属性来解决:

.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 10px solid #B189BB;
outline: 10px solid #F26460;
}

描边有一个好处在于,它跟边框类似,可以设置各种线型,比如虚线:

.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 10px solid #B189BB;
outline: 5px dashed #F26460;
}

有趣的是,还有一个 outline-offset 属性,可以控制描边的偏移量。

.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 10px solid #B189BB;
outline: 5px dashed #F26460;
outline-offset: 10px;
}

我们可以把 outline 扩展出去:

outline-offset

而且 outline-offset 还支持负值,可以将 outline 叠加在 border 之上:

.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 20px solid #B189BB;
outline: 5px dashed #F26460;
outline-offset: -12px;
}

利用这个特性可以玩出很多好玩的效果。

不过描边有一个缺陷——如果这个容器本身有圆角的话,描边并不能完全贴合圆角。目前所有浏览器的行为都是这样的:

box-shadow

如果你需要使用圆角,那么你就得另寻它法了。接着,我们又想到了 box-shadow 属性:

我们通常是这样设置投影的:

box-shadow: 0 5px 5px #000;

前面三个长度值,再加一个颜色值。

前两个长度值分别表示投影在水平和垂直方向上的偏移量,第三个长度值表示投影的模糊半径(也就是模糊的程度);颜色值就是投影的颜色。

如果我们把前三个值都设为零,实际上是没有任何效果的。因为如果投影即不偏移也不模糊,刚好会被这个元素自己严严实实地遮住。

box-shadow第四个长度值

很多人可能不知道的是,投影还可以有第四个长度值。这个值表示投影向外扩张的程度:

box-shadow: 0 0 0 10px #F26460;

这样,投影就会从元素的底下露出一圈了。

关于投影,另外一个不是每个人都知道的特性是,投影属性其实可以接受一个列表,我们可以一次赋予它多层投影,像这样:

.text {
width: 254px;
height: 254px;
background: #CEE5D1;
border: 20px solid #B189BB;
border-radius: 40px;
box-shadow:
   0 0 0 10px #F26460,
0 0 0 20px #FBF0D0,
0 0 0 30px #78BDDE;
}

这样我们就得到了超过两层的 “边框” 效果了。

投影的另外一个好处是,它的扩张效果是根据元素自己的形状来的。如果元素是矩形,它扩张开来就是一个更大的矩形;如果元素有圆角,它也会扩张出圆角。

注意事项

由于描边和投影都是不影响布局的,所以如果这个元素和其它元素的相对位置关系很重要,就需要我们以外边距等方式来为这些多出来的 “边框” 腾出位置,以防被其它元素盖住。

因此,从这个意义上来说,使用内嵌投影似乎是更好的选择。因为内嵌投影让投影出现在元素内部,我们可以用内边距在元素的内部消化掉这些额外 “边框” 所需要的空间,处理起来更容易一些。

参考文章:https://github.com/cssmagic/blog/issues/54#rd

border、outline、boxshadow那些事的更多相关文章

  1. css深入理解之 border

    一 border-width不支持百分比值 1 不符合客观逻辑 2 w3成都一种约定吧 3 边框本身就像是一个包裹内容的界限 类似的还有outline,box-shadow text-shadow均不 ...

  2. 13机器学习实战之PCA(1)

    降维技术 对数据进行降维有如下一系列的原因: 使得数据集更容易使用 降低很多算法的计算开销 去除噪音 使得结果易懂 在以下3种降维技术中, PCA的应用目前最为广泛,因此本章主要关注PCA. 主成分分 ...

  3. CSS 基础篇、绝对有你想要

    本章内容: 简介 CSS 定义 四种引入方式 样式应用的顺序 选择器(Selector) * 通用元素选择器 标签选择器 class 类选择器 # ID选择器 , 多元素选择器 后代元素选择器 > ...

  4. ABP集合贴

    thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>t ...

  5. jquery双向列表选择器select版

    这个是select版的,若想美化某些样式是不支持得,可以用div模拟版的,功能基本实现能用了,需要其他功能自己加上. div模拟版链接:http://www.cnblogs.com/tie123abc ...

  6. CSS技能汇总,研究及实践

    最近一直在研究CSS,因为发现实践中大部分时间都在写CSS,且自己感觉写的很烂,虽然以前看的很多,但却很少有去实践过,更别提研究了,现在发现根本就不是你懂你就会,很多都是你用着用着才真的会了的,于是现 ...

  7. 利用css3选择器及css3边框做出的特效(1)

    利用border-radius及box-shadow制作圆角表格 界面效果图如下: css样式如下所示: * { margin:; padding:; } body { padding: 40px 1 ...

  8. jq图片切换特效

    首先引入js,内容如下: (function($){$.fn.slides=function(option){option=$.extend({},$.fn.slides.option,option) ...

  9. bootstrap-combined.min.css

    /*! * Bootstrap v2.2.2 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 * ht ...

随机推荐

  1. 命令行模式和Python交互模式的区别

    1.命令行模式: 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\Users\>: 2.python交互模式 在命令行模式下敲命令python,就看到类似如下 ...

  2. 小z的洞穴之旅 QDUOJ 并查集+连通块

    小z的洞穴之旅 QDUOJ 并查集+连通块 原题链接 题意 小 z 同学在某个闲暇的周末决定去野外探险一波,结果在丛林深处中误打误撞进入了一个神秘的洞穴,虽然洞穴中光线昏暗,但小 z 凭借其敏锐的眼力 ...

  3. jupyter与requests的初步使用

    upyter 是一个简易的,方便的写Python代码的工具包,requests是Python里非常好用的用来发送 http 请求的包. 开始学习本教程之前,请确保你已经安装了Python,并且安装了P ...

  4. JavaScript回顾

    JavaScript是Web编程语言. JavaScript是一种基于对象的脚本语言 它是解释执行的 在客户端的浏览器中运行 可以被嵌入HTML文件中 代码以纯文本的形式存储在文件中 可以使用任何一种 ...

  5. Ubuntu16.04 php7.1安装redis扩展

    sudo apt install php7.1-redis //修改php配置 vi /etc/php.ini 添加extension=redis.so

  6. drop,delete,truncate 的区别

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独 ...

  7. Spring基础09——Bean的自动装配

    1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...

  8. netlink, PF_NETLINK - 内核与用户之间的通讯

    SYNOPSIS 总揽 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h& ...

  9. mpg123 - 播放 MPEG 1.0/2.0 Layer-1, -2, -3 音频文件

    语法 mpg123 [ -tscvqy01m24 ][ -b size ][ -k num ][ -n num ][ -f factor ][ -r rate ][ -g gain ][ -a dev ...

  10. tf模型可视化工具

    一方面可以用tensorboard来可视化,更方便的是用如下网址: https://lutzroeder.github.io/netron/