border、outline、boxshadow那些事
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那些事的更多相关文章
- css深入理解之 border
一 border-width不支持百分比值 1 不符合客观逻辑 2 w3成都一种约定吧 3 边框本身就像是一个包裹内容的界限 类似的还有outline,box-shadow text-shadow均不 ...
- 13机器学习实战之PCA(1)
降维技术 对数据进行降维有如下一系列的原因: 使得数据集更容易使用 降低很多算法的计算开销 去除噪音 使得结果易懂 在以下3种降维技术中, PCA的应用目前最为广泛,因此本章主要关注PCA. 主成分分 ...
- CSS 基础篇、绝对有你想要
本章内容: 简介 CSS 定义 四种引入方式 样式应用的顺序 选择器(Selector) * 通用元素选择器 标签选择器 class 类选择器 # ID选择器 , 多元素选择器 后代元素选择器 > ...
- ABP集合贴
thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>t ...
- jquery双向列表选择器select版
这个是select版的,若想美化某些样式是不支持得,可以用div模拟版的,功能基本实现能用了,需要其他功能自己加上. div模拟版链接:http://www.cnblogs.com/tie123abc ...
- CSS技能汇总,研究及实践
最近一直在研究CSS,因为发现实践中大部分时间都在写CSS,且自己感觉写的很烂,虽然以前看的很多,但却很少有去实践过,更别提研究了,现在发现根本就不是你懂你就会,很多都是你用着用着才真的会了的,于是现 ...
- 利用css3选择器及css3边框做出的特效(1)
利用border-radius及box-shadow制作圆角表格 界面效果图如下: css样式如下所示: * { margin:; padding:; } body { padding: 40px 1 ...
- jq图片切换特效
首先引入js,内容如下: (function($){$.fn.slides=function(option){option=$.extend({},$.fn.slides.option,option) ...
- bootstrap-combined.min.css
/*! * Bootstrap v2.2.2 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 * ht ...
随机推荐
- Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析
Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...
- Spark-Core RDD转换算子-双Value型交互
1.union(otherDataSet) 作用:求并集. 对源 RDD 和参数 RDD 求并集后返回一个新的 RDD scala> val rdd1 = sc.parallelize(1 to ...
- [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)
[多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...
- [BZOJ 4025]二分图(线段树分治+带边权并查集)
[BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\ ...
- 解决keil5中文注释乱码方法
菜单上面的edit-->Configuration-->Editor-->Encoding 选择Chinese GB2312 点击OK即可解决 参考 解决keil和source in ...
- 卸载yum-mysql
注意事项:1. 卸载yum MYSQLsystemctl status mysqlsystemctl stop mysqlsystemctl disable mysqld rpm -qa | grep ...
- hdu6468 zyb的面试 (思维)
题目传送门 题意: 将1~n个数按字典序排序后,求第k个数 思路: 代码: #include<stdio.h> #include<iostream> #include<a ...
- gomock
参考 使用Golang的官方mock工具--gomock
- json与导入模块目录
import json """主要用于不同语言的数据公用 """ info = {"a":1,"b" ...
- BloomFilter&python支持
BloomFilter&python支持 BloomFilter 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时, ...