背景与边框

一 半透明边框 rgba/hsla颜色

1.难题
假设我们想给一个容器设置一层白色背景和一道半透明白色边框,body
的背景会从它的半透明边框透上来。我们最开始的尝试可能是这样的:

  1. #border {
  2. width:100px;
  3. height:100px;
  4. border: 10px solid hsla(0,0%,100%,.5);
  5. background: white;
  6. }

但实际上看不到边框,边框去哪儿了?

2.解决方案
尽管看起来并不像那么回事,但我们的边框其实是存在的。默认情况下,
背景会延伸到边框所在的区域下层。
在CSS 2.1 中,这就是背景的工作原理。
可以通过background-clip 属性来调整上述默认行为所带来的不便。

  1. #border {
  2. border: 10px solid hsla(0,0%,100%,.5);
  3. background: white;
  4. background-clip: padding-box;
  5. }

二 多重边框

box-shadow的基本用法
1.难题
我们通常希望在CSS 代码层面以更灵活的方式来
调整边框样式。因此,网页开发者们最终不得不折腾出各种丑陋的hack,比
如使用多个元素来模拟多重边框。不过,我们还有更好的办法来解决这个难
题,并不需要添加无用的额外元素来污染我们的结构。

2.box-shadow 方案
box-shadow接受4个参数,第4个参数扩展半径
一个正值的扩张半径加上两个为零的偏移量以及为零的模糊值,
得到的“投影”其实就像一道实线边框

  1. #border {
  2. background:red;
  3. box-shadow:0 0 0 10px #555;
  4. }

唯一需要注意的是,box-shadow 是层层叠加的,第一层投影位于最顶
层,依次类推。因此,你需要按此规律调整扩张半径。比如说,在前面的代
码中,我们想在外圈再加一道5px 的外框,那就需要指定扩张半径的值为
15px(10px+5px)。如果你愿意,甚至还可以在这些“边框”的底下再加一
层常规的投影:

  1. #border {
  2. background: yellowgreen;
  3. box-shadow: 0 0 0 10px #655,
  4. 0 0 0 15px deeppink,
  5. 0 2px 5px 15px rgba(0,0,0,.6);
  6. }

多重投影解决方案box-shadow注意:

1> 投影的行为跟边框不完全一致,因为它不会影响布局,而且也不会
受到box-sizing 属性的影响。不过,你还是可以通过内边距或外边
距(这取决于投影是内嵌和还是外扩的)来额外模拟出边框所需要
占据的空间。
2> 上述方法所创建出的假“边框”出现在元素的外圈。它们并不会响
应鼠标事件,比如悬停或点击。如果这一点非常重要,你可以给
box-shadow 属性加上inset 关键字,来使投影绘制在元素的内圈。
请注意,此时你需要增加额外的内边距来腾出足够的空隙。

3.outline 方案
在某些情况下,你可能只需要两层边框,那就可以先设置一层常规边
框,再加上outline(描边)属性来产生外层的边框。

  1. #border {
  2. background: yellowgreen;
  3. border: 10px solid #655;
  4. outline: 5px dashed deeppink;
  5. outline-offset:;
  6. }

你可以通过outline-offset 属性来控制它跟
元素边缘之间的间距,这个属性甚至可以接受负值。

outline 方案注意:
1> 它只适用于双层“边框”的场景,因为 outline 并不能
接受用逗号分隔的多个值。如果我们需要获得更多层的边框,前一
种方案就是我们唯一的选择了。
2> 边框不一定会贴合border-radius属性产生的圆角,因此如果元素
是圆角的,它的描边可能还是直角的。请注意,这种行为被CSS
工作组认为是一个bug,因此未来可能会改为贴合borderradius圆角。

三 灵活的背景定位

1.background-position 的扩展语法方案
背景与容器底部和右部距离

  1. #bg {
  2. background: url(img1.svg)
  3. no-repeat bottom right #58a;
  4. background-position: right 20px bottom 10px; /*扩展语法*/
  5. }

2.background-origin 方案
background-origin属性指定了背景图像的位置区域 默认是padding-box
content-box, padding-box,和 border-box区域内可以放置背景图像

  1. #bg {
  2. padding: 10px;
  3. background: url("code-pirate.svg") no-repeat #58a
  4. bottom right; /* 或 100% 100% */
  5. background-origin: content-box;
  6. }

3.calc() 方案
把背景图片定位到距离底边10px 且
距离右边20px 的位置。如果我们仍然以左上角偏移的思路来考虑,其实
就是希望它有一个100% - 20px 的水平偏移量,以及100% - 10px 的垂直
偏移量。

  1. #bg {
  2. background: url("code-pirate.svg") no-repeat;
  3. background-position: calc(100% - 20px) calc(100% - 10px);
  4. }

四 边框内圆角

1.难题
有时我们需要一个容器,只在内侧有圆角,而边框或描边的四个角在外
部仍然保持直角的形状,如图2-15 所示。这是一个有趣的效果,目前还没
有被滥用。用两个元素可以实现这个效果,这并没有什么特别的:

  1. .something-meaningful {
  2. background: #655;
  3. padding: .8em;
  4. }
  5. .something-meaningful > div {
  6. background: tan;
  7. border-radius: .8em;
  8. padding: 1em;
  9. }

有没有办法可以只用一个元素达成同样的效果呢?

2.解决方案

描边并不会跟着元素的圆角走
因此,如果我们把这两者叠加到一起,box-shadow
会刚好填补描边和容器圆角之间的空隙,
这两者的组合达成了我们想要的效果:

  1. .something-meaningful {
  2. background: tan;
  3. border-radius: .8em;
  4. padding: 1em;
  5. box-shadow: 0 0 0 .6em #655;
  6. outline: .6em solid #655;
  7. }

到底多大的投影扩张值box-shadow可以填补这些空隙呢?
请注意,该计算过程揭示了这个方法的另一个限制:为了让这个效果得
以达成,扩张半径需要比描边的宽度值小,但它同时又要比( 2 −1)r大
(这里的r 表示 border-radius)。这意味着,如果描边的宽度比 ( 2 −1)r 小,
那我们是不可能用这个方法达成该效果的。

五 条纹背景

1.难题
不论是在网页设计中,还是在其他传统媒介中(比如杂志和墙纸等),
各种尺寸、颜色、角度的条纹图案在视觉设计中无处不在。要想在网页中实
现条纹图案,其过程还远远不够理想。通常,我们的方法是创建一个单独的
位图文件,然后每次需要做些调整时,都用图像编辑器来修改它。可能有人
试过用SVG 来取代位图,但这样还是会有一个独立的文件,而且它的语法
也远远不够友好。如果可以直接在CSS 中创建条纹图案,那该有多棒啊!
你可能会惊讶地发现,我们居然真的可以。

2.解决方案 linear-gradient(#fb3,#58a)

  1. #bg {
  2. background: linear-gradient(#fb3, #58a);
  3. }

如果多个色标具有相同的位置,它们会产生一个无限小的过渡区域,
过渡的起止色分别是第一个和最后一个指定值。从效果上看,颜色会在那
个位置突然变化,而不是一个平滑的渐变过程
#bg {
background: linear-gradient(#fb3 50%, #58a 50%);
}
如果某个色标的位置值比整个列表中在它之前的色标的位置值都要
小,则该色标的位置值会被设置为它前面所有色标位置值的最大值

  1. #bg {
  2. background: linear-gradient(#fb3 30%, #58a 0);
  3. background-size: 100% 30px;
  4. }
  5. /*多种颜色:*/
  6. #bg {
  7. background:linear-gradient(#fb3 33.3%,#58a 0,#58a 66.6%,yellowgreen 0)
  8. }

3.垂直条纹
垂直条纹的代码跟水平条纹几乎是一样的,差别主要在于:我们需要在
开头加上一个额外的参数来指定渐变的方向。在水平条纹的代码中,我们其
实也可以加上这个参数,只不过它的默认值to bottom 本来就跟我们的意
图一致,于是就省略了。最后,我们还需要把background-size 的值颠倒
一下,

  1. #bg {
  2. background: linear-gradient(to right, /* 或 90deg */#fb3 50%, #58a 0);
  3. background-size: 30px 100%;
  4. }

4.斜向条纹

  1. #bg {
  2. background: linear-gradient(45deg,#fb3 25%, #58a 0, #58a 50%,#fb3 0, #fb3 75%, #58a 0);
  3. background-size: 30px 30px;
  4. }

5.更好的斜向条纹
我们还有更好的方法来创建斜向条纹。一个鲜为人知的真
相是linear-gradient() 和radial-gradient() 还各有一个循环式的加强
版:repeating-linear-gradient() 和repeating-radial-gradient()。
它们的工作方式跟前两者类似,只有一点不同:色标是无限循环重复的,直
到填满整个背景。下面是一个重复渐变的例子

  1. #bg {
  2. background: repeating-linear-gradient(45deg,
  3. #fb3, #fb3 15px, #58a 0, #58a 30px);
  4. }

6.灵活的同色系条纹

  1. #bg {
  2. background: #58a;
  3. background-image: repeating-linear-gradient(30deg,
  4. hsla(0,0%,100%,.1),
  5. hsla(0,0%,100%,.1) 15px,
  6. transparent 0, transparent 30px);
  7. }

但我们现在只需要修改一个地方
就可以改变所有颜色了。我们还得到了一个额外的好处,对于那些不支持
CSS 渐变的浏览器来说,这里的背景色还起到了回退的作用。

六 复杂的背景图案
CSS 渐变在实现这些图案时也能大展拳脚。用CSS 渐变
来创建任何种类的几何图案几乎都是可能的,只不过有时这种方法不太实
际。

1.网格

七 伪随机背景

八 连续的图像边框

02--css背景与边框--css揭秘的更多相关文章

  1. {前端CSS} 语法 Css的几种引入方式 css选择器 选择器的优先级 CSS属性相关 背景属性 边框 CSS盒子模型 清除浮动 overflow溢出属性  定位(position)z-index

    前端CSS CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式表来对文 ...

  2. CSS背景与边框属性-----box-shadow

    box-shadow:none | <shadow> [ , <shadow> ]*   <shadow> = inset? && <leng ...

  3. 认识CSS中css背景样式设置

    前端之HTML,CSS(五) CSS CSS背景 CSS可以添加背景颜色和背景图片,也可以对图片进行设置.设置的样式有: background-color 背景颜色 background-image ...

  4. CSS 背景-CSS background

    这里有个很好的样式学习网站:http://www.divcss5.com/rumen/r125.shtml 一.Css background背景语法   -   TOP CSS背景基础知识 CSS 背 ...

  5. CSS背景background图片

    一.CSS背景background图片   -   TOP 1.背景图片语法background-image:url() 引入背景图片background-repeat:no-repeat 设置背景图 ...

  6. CSS 背景background实例

    css背景background用于设置html标签元素的背景颜色.背景图片已经其他背景属性.本文章向码农介绍CSS 背景background使用方法和基本的使用实例.需要的码农可以参考一下. 一.Cs ...

  7. CSS揭秘(二)背景与边框

    Chapter2 背景与边框 1. 半透明边框 基础:了解 RGBA & HSLA 颜色(色调 0~360.饱和度.亮度 (0%黑色~100%白色).透明度) 默认情况下,背景在边框的下层,容 ...

  8. css中的背景、边框、补丁相关属性

    css中的背景.边框.补丁相关属性 关于背景涉及到背景颜色与背景图片 背景颜色background-color即可设定: 背景图片background-image即可设定: 但是背景图片还涉及到其他的 ...

  9. web前端学习(三)css学习笔记部分(7)-- 文字和字体相关样式、盒子相关样式、背景与边框相关样式

    12.  文字和字体相关样式 12.1  CSS3 给文字添加阴影 使用 text-shadow 属性给页面上的文字添加阴影效果,text-shadow 属性是在CSS2中定义的,在 CSS2.1 中 ...

随机推荐

  1. Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题

    我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题.经过测试,发现了一种解决办法,在DialogFragmen ...

  2. Javascript高级编程学习笔记(6)—— 流程控制语句

    话不多说,我们直接开始进入今天的主题 流程控制语句 首先什么是流程控制语句呢? 顾名思义,就是控制流程的语句. 在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指 ...

  3. Web开发经验谈之F12开发者工具/Web调试[利刃篇]

    引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东西了,或者换句话说,你想要实现的功能,你总能在某个地方搜索到答案,关键是你有没有这个时间精力去搜 ...

  4. JS特效实现微博评论逻辑

    实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. LeetCode:149_Max Points on a line | 寻找一条直线上最多点的数量 | Hard

    题目:Max Points on a line Given n points on a 2D plane, find the maximum number of points that lie on ...

  6. vuex的module的简单实用方法

    当我们的项目越来越大的时候,我们就开始使用vuex来管理我们的项目的状态.但是如果vuex的状态多了呢,这个时候module就登场了.看了一下官方的文档,很详细,但是没有demo让初学者很头疼.那我就 ...

  7. 3-1 vue生命周期

    Vue实例生命周期函数 ================================================================== ③-④当beforeMount这个函数执行 ...

  8. Apache多站点配置(ubuntu)(原创)

      1,先进入Apaches2的目录下 cd /etc/apache2   2,进入sites-available中 cd sites-available vi 000-default.conf   ...

  9. linux日常运维常用命令

    ---查看端口占用 netstat -ap | grep 8000 ---重启nginx sudo /usr/sbin/nginx -c /usr/local/nginx/conf/nginx.con ...

  10. Emgucv学习系列之环境搭建

    Emgucv功能介绍 Emgucv是跨平台的,是Opencv的.net版本.可以对图片.视频等多媒体资源进行加工处理的SDK库. Emgucv下载和安装SDK 下载地址:https://sourcef ...