《CSS揭秘》之背景与边框

ppgo8 于 2023-02-26 发布

2023-02-26-CSS背景与边框

《CSS揭秘》

第一章 引言 读书笔记 第二章 背景与边框 读书笔记

引言

CSS编码技巧

相信眼睛,而不是数字

响应式网页设计

​ 暂时未看

背景与边框

半透明边框

**背景知识**

​ CSS中的半透明色属性值:rgba(),hsla()

难题

​ 半透明色应用主要集中在背景上。原因:

  1. 早期工作者
  2. 针对背景的回退方案比其他属性容易的多。
  3. (重点)在其他属性,如边框中使用半透明色并没有那么容易

解决方案

背景与边框的工作原理:默认情况下,背景会延伸到边框所在区域的下层。验证方法:给有背景的元素应用虚线边框。

解决方法

​ CSS3背景与边框的background-clip属性调整上述默认行为。

background-clip: border-box;   # 默认值,背景入侵边框
background-clip: padding-box;  # 背景会在内外边距处被截掉,不会入侵边框

示例

image-20230226102214230

多重边框

背景知识

​ 盒子阴影box-shadow属性的基本用法

box-shadow的5个属性值
x轴偏移量 
y轴偏移量
模糊半径
扩张半径: 指定正值或负值,增加或减小投影面积 
颜色 
/*注意,可用逗号分隔得到多个shadow*/

难题

​ CSS没有直接设置多重边框的属性。

解决方案

1.box-shadow方案

两个为0的偏移量+0的模糊值+正值的扩张半径,得到的“投影”就像一道实线边框。且,支持逗号分隔语法,可以创建任意数量的实线投影,实现多重实线边框的效果。

box-shadow注意事项:

2.outline方案

适用场景:适用只需要两层边框的情况

方法:先设置常规边框border,再加上outline(描边)属性来产生外层边框。

优点:灵活,可以产生虚线;

​ 可以通过outline-offset属性设置描边和元素边缘之间的距离。

outline注意事项:

示例

image-20230226150524097

灵活的背景定位

背景知识

background-position语法

background-position: x坐标 ;     /*此时y坐标默认50%*/
background-position: x坐标 y坐标;
/*坐标参数可以是:百分数或center,top,bottom,right,left等关键字*/

难题

​ 需求:现实中,有时针对容器的某个角对背景图片做偏移定位,如右下角。

​ css2.1中,只能指定距离左上角的偏移量,或者完全对齐到其他角。

解决方案

1.background-position的拓展语法方案

​ CSS3中background-position属性已经得到拓展,它允许指定背景图片**距离任意角的偏移量**,只需要在偏移量前面指定关键字。

​ 如,距离右边缘20px,底边10px

background-position: right 20px bottom 10px;

​ 注意,提供一个合适的回退方案。因为在不支持上述拓展语法的浏览器中,背景图片会紧贴在左上角(背景图片默认位置)。提供的回退方案就是把老套的bottom right写在background的简写属性中。

background: url() no-repet bottom right #fff;
background-position: background-position: right 20px bottom 10px;

2.background-origin方案

适用情况(偏移量较特殊的情况)

​ 给背景图片设置距离某个角的偏移量时,有一种常见情况:偏移量与容器内边距保持一致。如,采用background-postion的拓展与法方案,代码可能是:

padding: 10px;
background: url() no-reprt #fff;
background-position: right 10px bottom 10px;

​ 但是,每次改动内边距的值的时,我们都需要在三个地方更新这个值。不够DRY。

​ 更简单的方法:让背景图片自动跟着内边距走,不用另外声明偏移量

background-position: top left;这样的代码,到底是哪个左上角? 每个元素身上存在三个矩形框,边框的外沿框(border-box)、内边距的外沿框(padding-box)、内容区的外沿框(content-box)。那么,背景定位background-position属性指定的是哪个左上角?

image-20230226154657647

默认情况下,background-position是以padding-box为准的,这样边框才不会遮住背景图片。

因此,top left指的是padding box的左上角。

​ 在CSS3中,新属性background-origin,可以改变这种行为。其语法为

background-orgin: 
padding-box 默认参数,内边距外沿对齐
content-box 和内容区外沿对齐

解决方法

​ 此时,若发生改变,就不用再修改多次值。

padding: 10px;
background: url() no-repeat bottom right; 
background-origin: content-box;

3.calc()方案

​ 仍然以左上角的偏移量思路来计算,针对大小不固定的容器,其实就是需要

​ 在css中,calc()函数允许执行此种运算。

background: url() no-repeat;
backgroud-position : calc(100% - 20px) calc(100% - 10px) ; 

注意:calc中加减号的两侧需要有空格。

示例

image-20230226160654597

边框内圆角

背景知识

box-shadow:在各种浏览器中均会跟随圆角

outline:在IE中不跟随圆角,会有缝隙。在谷歌、火狐中跟随圆角。

image-20230227143810686

难题

实现边框内圆角,外层直角边框,内层圆角。效果如下图:

image-20230227143835848

解决方案

1.两个元素方案

父盒子嵌套子盒子。父盒子正常设置样式,子盒子修改border-radius属性即可

2.一个元素方案

(基于outline不跟随圆角的浏览器,现只有IE是这样)

方法步骤:

示例