4.多重背景

CSS支持一个元素设置多个背景图片。

每个背景属性有相应的多值语法,多个值由逗号分隔。

  1. .multi-bg-shorthand {
  2. width: 300px;
  3. height: 200px;
  4. background: url(img/spades.png) left top no-repeat,
  5. url(img/hearts.png) right top no-repeat,
  6. url(img/diamonds.png) left bottom no-repeat,
  7. url(img/clubs.png) right bottom no-repeat,
  8. pink;
  9. }

如果随后的背景属性值少于背景图片的个数,那么相应的值会循环使用。

  1. .multi-bg-shorthand {
  2. width: 300px;
  3. height: 200px;
  4. background: url(img/spades.png) left top,
  5. url(img/hearts.png) right top,
  6. url(img/diamonds.png) left bottom,
  7. url(img/clubs.png) right bottom,
  8. pink;
  9. background-repeat: no-repeat; /* 用于4张图片 */
  10. }

5.边框与圆角

  • 可以分别为盒子的各边设置边框,也可以一次性为四边设置边框
  • 除非明确指定box-sizing属性,否则边框宽度会影响盒子的尺寸
  • 设置边框的样式使用border-style
  • 可以使用border简写属性来设置所有边框属性(border: 2px solid #000

5.1 边框半径:圆角

border-radius属性一个长度值,就可以一次性设置盒子四个角的半径。

  1. border-radius: 0.5em;

分别设置每个圆角的半径,即从左上角开始,按顺时针方向依次列出各个值。

  1. /* 每个值本身其实也是简写,它们各自表示相应圆角水平和垂直方向拥有相同的半径。 */
  2. border-radius: 0.5em 2em 0.5em 2em;

如果想把每个角设置成非对称的,也可以用两组值分别指定两个方向的半径,先水平再垂直,两组值以斜杠分隔。

  1. border-radius: 2em .5em 1em .5em / .5em 2em .5em 1em;

如果对角的值相同,那就可以省略右下和左下角的值。

  1. /* 第一个值设置左上和右下角,第二个值设置右上和左下角。 */
  2. border-radius:2em 3em;

5.2 创建正圆和胶囊形状

在给border-radius指定百分比值时,x轴和y轴分别相对于元素的宽度和高度来计算实际值。

  1. <div class="round"></div>
  2. <div class="round oval"></div>
  1. div {
  2. display: inline-block;
  3. margin-right: 1em;
  4. }
  5. .round {
  6. width: 100px;
  7. height: 100px;
  8. border-radius: 50%;
  9. background-color: #59f;
  10. }
  11. .oval {
  12. width: 300px;
  13. }

"胶囊形",即一个矩形的两端各带一个半圆形,这种形状在工程上称为“长圆形”(obrund)。

  1. <a class="obrund" href="#">A ”pill-shape”</a>
  1. a {
  2. text-decoration: none;
  3. color: #fff;
  4. background-color: #59f;
  5. padding: 1em;
  6. }
  7. .obrund {
  8. border-radius: 999em; /* 任意非常大的值 */
  9. }

5.3 边框图片

边框图片,即为元素指定一张图片作为边框。

border-image属性支持把一张图片切成9块,我们只管定义切图规则,浏览器会自动把每一块应用到指定的边框位置。

  1. .motto {
  2. border: 40px solid #f9b256;
  3. /* 加载图片picture-frame.png,在每边向内40像素的位置切开 */
  4. border-image: url(img/picture-frame.png) 40;
  5. }

注意:指定切片参考线位置的“40像素”没有px单位,这是为了同时适应SVG和位图而使用的小技巧。

必须把border简写属性放在border-image属性前面,因为规范规定简写语法会重置所有边框属性。

6.盒阴影

使用box-shadow属性给元素添加阴影。

  1. /* x轴偏移 y轴偏移 模糊半径 颜色 */
  2. box-shadow: .25em .25em .5em rgba(0, 0, 0, 0.3);

在模糊半径后面可以再加一个值,表示扩展半径,用于扩展阴影的大小。

  1. box-shadow: 1em 1em .5em .5em rgba(0, 0, 0, 0.3);

使用关键字inset为元素应用内阴影

  1. box-shadow: inset .25em .25em .5em rgba(0, 0, 0, 0.3);

给一个元素应用多个阴影,以逗号分隔多组值。

  1. box-shadow: 0 0 0 10px #1c318d,
  2. 0 0 0 20px #3955c7,
  3. 0 0 0 30px #546dc7,
  4. 0 0 0 40px #7284d8;

7.渐变

在背景上使用渐变色是一种常见设计,能给页面增加一种纵深感。

7.1 线性渐变

  1. background-image: linear-gradient(to bottom, #cfdeee 0%, #8da9cf 100%);

linear-gradient()函数第一个参数表示渐变线的方向。

渐变线总是始于元素的一个边或一个角,然后穿过元素的中心区域。

线性渐变的默认方向是自上而下(to bottom)。而0%和100%分别表示第一个和最后一个色标的位置。

因此,前面的例子可以简写如下:

  1. background-image: linear-gradient(#cfdfee, #8da9cf);

可以使用deg单位指定渐变线的角度,0deg表示垂直向上,增大角度值就意味着沿顺时针方向旋转,直到360度。

  1. background-image: linear-gradient(45deg, #cfdfee, #4164aa);

新增色标若未指定位置,则在0%~100%范围内取均值。

  1. /* 5个未指定位置的色标:0%、25%、50%、75%、100% */
  2. background-image: linear-gradient(red, green, blue, yellow, purple);

除了百分比,还可以使用绝对值指定色标位置。

  1. /* 从顶部浅蓝色开始,往下到100像素位置时过渡到深蓝色,然后一直到背景图片区域底部都是同样的深蓝色 */
  2. background-image: linear-gradient(#cfdfee, #8da9cf 100px);

7.2 放射渐变

放射渐变从一个中心点开始向四周扩散,覆盖的范围可以是圆形或椭圆形。

  • 放射渐变的类型:圆形(circle)和椭圆形(ellipse)。
  • 射线半径决定渐变范围大小。圆形只接受一个半径值,而椭圆形接受x轴和y轴两个方向的半径值。椭圆形可以接受任意长度或百分比值,百分百值相对于轴向的背景图片大小。圆形只接受长度值,不接受百分比值。此外,还可以使用关键字代表渐变区域结束的位置。closest-sidefarthest-side分别表示渐变区域延伸至最近边还是最远边,closest-cornerfarthest-corner分别表示渐变区域边缘接触最近角还是最远角。
  • 色标沿渐变扩展方向指定,以逗号分隔。
  1. background-image: radial-gradient(circle closest-corner at 20% 30%, #cfdfee, #2c56a1);

上面的例子的渐变区域中心位置为x轴方向20%,y轴方向30%,放射半径为该中心到最近角的距离。在圆周外部,由终点色标颜色覆盖整个背景图片区域。

7.3 重复渐变

重复渐变函数可以沿渐变直线(或射线)重复某个渐变色标组合,重复次数视其大小(由background-size决定)及允许的大小(元素大小)而定。

  1. /* 重复的线性渐变 */
  2. background-image: repeating-linear-gradient(#cfdfee, #2c56a1 20px);
  1. /* 重复的放射渐变 */
  2. background-image: repeating-radial-gradient(#cfdfee, #2c56a1 20px);

7.4 把渐变当作图案

  1. body {
  2. margin: 0;
  3. background-color: #fff;
  4. background-image: linear-gradient(
  5. transparent,
  6. transparent 50%,
  7. rgba(55, 110, 176, 0.3) 50%
  8. ),
  9. linear-gradient(
  10. to right,
  11. transparent,
  12. transparent 50%,
  13. rgba(55, 110, 176, 0.3) 50%
  14. );
  15. background-size: 40px 40px;
  16. }

桌布似的花格图案:

把相邻的两个色标(transparent 50%rgba(55, 110, 176, 0.3) 50%)重叠在一起,让渐变无从发生,而是突然的变化,形成锐利的线条。

通过background-size: 40px 40px;控制背景大小和重复。

渐变图案、盒阴影以及伪元素,这些加起来完全可以代替图片来实现各种创意。

7.5 为嵌入图片和元素添加样式

文档中的图片与其他元素不同,它本身是有像素宽度和高度的,而且宽度和高度的比例固定。在可伸缩的设计中,元素宽度要随浏览器窗口宽度变化而变化,此时也需要CSS来控制图片及其他嵌入的元素。

7.5.1 可伸缩的图片模式

  1. <div class="img-container">
  2. <img src="img/profile.jpg" alt="Charles the Cat">
  3. </div>
  4. <div class="img-container img-container-large">
  5. <img src="img/profile.jpg" alt="Charles the Cat">
  6. </div>
  1. .img-container {
  2. padding: 1em;
  3. border: 1px solid #777;
  4. border-radius: 1em;
  5. width: 100px;
  6. display: inline-block;
  7. vertical-align: top;
  8. margin-right: 2em;
  9. }
  10. img {
  11. max-width: 100%;
  12. }
  13. .img-container-large {
  14. width: 500px;
  15. }

根据需要把图片渲染成不同大小(所谓的响应式图片)对性能影响很大。

max-width属性意味着图片会随着包含它的容器缩小而缩小,但在容器变大时,它不会大到超出自身的固有尺寸。

7.5.2 控制对象大小的方法

object-fit属性的默认值为fill,意味着图片内容会在必要时拉伸以填满容器,因此可能破坏宽高比。

参考:object-fit - CSS(层叠样式表) | MDN

7.5.3 可保持宽高比的容器

对于具有固定宽高比的位图,把高度设置为auto,只改变宽度,或者把宽度设置为auto,只改变高度,都是可以的。

iframeobject元素没有固定的宽高比。CSS规范指出,对于没有指定大小的可替代内容,最终的默认大小为300像素宽或150像素高。(听上去不可思议,但这是真的!)

在页面中包含可伸缩的嵌入对象:

  1. <div class="object-wrapper">
  2. <iframe width="420" height="315" src="" frameborder="0" allowfullscreen></iframe>
  3. </div>
  1. .object-wrapper {
  2. width: 100%;
  3. height: 0;
  4. position: relative;
  5. padding-bottom: 75%; /* 315÷420,高度是宽度的75% */
  6. }
  7. .object-wrapper iframe {
  8. position: absolute;
  9. top: 0;
  10. right: 0;
  11. bottom: 0;
  12. left: 0;
  13. }

参考资料:

CSS漂亮盒子(下)的更多相关文章

  1. css - inline-block 盒子下的内容文字错位问题

    参考资料: “display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落.错位”的原因及解决方法: 正文: 场景:两个 div 排在一行上,各有固定宽高, ...

  2. CSS漂亮盒子(上)

    HTML文档中的所有元素都是由矩形盒子构成的--不管是包含页面结构的容器元素,还是段落中的每行文本,归根结底都是盒子. 1.背景颜色 设置页面背景颜色. body { background-color ...

  3. jQuery自定义漂亮的下拉框插件8种效果演示

    原始的下拉框不好看这里推荐一个jQuery自定义漂亮的下拉框插件8种效果演示 在线预览 下载地址 实例代码 <!DOCTYPE html> <html lang="en&q ...

  4. CSS属性操作/下

    CSS属性操作/下 1.伪类 anchor伪类 跟<a>/</a>有关:专用于控制链接的显示效果 a:link(没有接触过的链接),用于定义了链接的常规状态. a:hover( ...

  5. 深入理解CSS系列(一):理解CSS的盒子模型

    接触前端也有好几个年头了,但是,讲实话,对于CSS的理解真的是不敢恭维,相信很多同行也有类似的感受吧!这是为什么呢?因为我们都认为CSS太简单了,没有必要深入学习,果真如此?其实,只不过是自己图样图森 ...

  6. 这些HTML、CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML、CSS、盒子模型、内容布局)

    这些HTML.CSS知识点,面试和平时开发都需要 No1-No4   系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) ...

  7. 使用css弹性盒子模型

    提示: 当期内容不充实, 修改后再来看吧 以下称:弹性子元素: 子元素, 弹性容器: 容器 弹性盒子的属性 1. css弹性盒子模型规定了弹性元素如何在弹性容器内展示 2. 弹性元素默认显示在弹性容器 ...

  8. 认识CSS中盒子模型

    前端之HTML,CSS(六) CSS 盒子模型 CSS中的重点,理解盒子模型对于CSS才能有更清晰的认识.网页说简单一点其实就是一块一块的拼接出来的,可以想象成拼图,所有图块拼接在一起就成了一幅图像. ...

  9. #CSS的盒子模型、元素类型

    CSS的盒子模型.元素类型   本文首先介绍了CSS元素的统一内部结构模型,盒子模型:然后介绍了CSS元素基于不同分类标准定义的元素类型,包括基于不同内容设置方式定义的replaced元素和non-r ...

随机推荐

  1. 数据可视化之powerBI技巧(五)在Power BI中写出优雅的度量值是什么体验?

    之前的文章(采悟:连接表的几个DAX函数,一次全掌握)介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析. 之前的思路是计算出两个产品的共同客 ...

  2. 05 drf源码剖析之认证

    05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...

  3. python之爬虫(十) Selenium库的使用

    一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...

  4. Nginx to start, restart, shutdown and upgrade

    1.start cd usr/local/nginx/sbin ./nginx 2.restart kill -HUP PID #主进程号或进程号文件路径 #或者使用 cd /usr/local/ng ...

  5. 数据清洗与准备知识图谱-《利用Python进行数据分析》

    所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片.

  6. 008.Nginx静态资源

    一 Nginx静态资源概述 1.1 静态资源类型 Nginx作为静态资源Web服务器部署配置, 传输非常高效, 常常用于静态资源处理,请求以及动静分离.通常非服务器动态运行生成的文件属于静态资源. 类 ...

  7. vue : 无法加载文件 C:\Users\ui61895076\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。

    说白了就是这个编辑器不能用罢了 执行以下代码 1.鼠标右击以管理员身份运行vscode; 2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 3. 执行: ...

  8. IDEA 2020.1.2安装破解激活 idea 2020.1.3下载 安装 一键破解

    IDEA 2020.1.2 idea 2020.1.3下载 安装 破解 本项目只做个人学习研究之用,不得用于商业用途!若资金允许,请点击链接购买正版,谢谢合作!学生凭学生证可免费申请正版授权!创业公司 ...

  9. Makefile中的奇葩字符

    % : Makefile规则通配符,一般出现在目标或是依赖中 * : shell命令中的通配符,一般出现在命令中 $@:目标的名字 $^:所有依赖的名字 $<:第一个依赖的名字 $?:所有依赖中 ...

  10. 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般情况下,点账户名——账户设置——安全设置,即可开通两步验证 具体步骤见链接  七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?   二次验证码小程序(官网)对比谷歌身份验证器APP ...