theme: channing-cyan

highlight: a11y-dark

双18期|CSS揭秘之简写属性

tips:每个技术点都值得优学优写:18期

一、写在前面

css 简写属性了解吗?前端程序员肯定是常见常用,但平时很少有这个提法,所以当被问及的时候,可能会有点蒙,但这是一个“正经”的词汇和名称,相信系统学过 CSS 的同学会对简写属性(Shorthand properties)有印象。

导读:本文将归纳 CSS 中常见的简写属性,包括它们的用法以及简写的优缺点。

①all:通用简写属性

②font:字体

③background:背景

④border:边框

⑤margin 和 padding:外边距和内边距

二、CSS常见简写属性

2.1 通用简写属性:all

CSS 提供了一个通用的简写属性 all,它可以应用于文档里所有的属性。它的目的是改变属性的继承模型。

CSS 的 shorthand(简写) 属性 all 可以用于同时将这些继承值中的一个应用于(几乎)所有属性。 它的值可以是其中任意一个(inherit, initial, unset, or revert)。 这是一种撤销对样式所做更改的简便方法,以便回到之前已知的起点。

```md inherit:设置该属性会使子元素属性和父元素相同。实际上,就是 "开启继承".

initial:设置属性值和浏览器默认样式相同。如果浏览器默认样式中未设置且该属性是自然继承的,那么会设置为 inherit。

unset:将属性重置为自然值,也就是如果属性是自然继承那么就是 inherit,否则和 initial一样。

revert:目前仅被很少浏览器支持。 ```

例如像下面这样:例子中有两个 div,第一个 div 应用了样式选择器 div 的样式, 第二个通过 类选择器 unset-all 设置 all 为 unset,重置了几乎所有样式。

```html

这是一段文字

这是另一段文字,它将被充值样式

```

```css div { background-color: red; border: 2px solid green; }

.unset-all { all: unset; } ```

下面是一张效果图

2.2 简写属性:font

font 属性可以用来作为 font-style, font-variant, font-weight, font-size, line-height 和 font-family 属性的简写,或将元素的字体设置为系统字体。

font 的语法

```md [ [ <'font-style'> || || <'font-weight'> || <'font-stretch'> ] ? <'font-size'> [ / <'line-height'> ] ? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar = [ normal | small-caps ]

<'font-style'> – font-style CSS 属性允许你选择 font-family 字体下的 italic 或 oblique 样式。 <'font-variant'> – font-variant 属性是font-variant-caps, font-variant-numeric, font-variant-alternates, font-variant-ligatures, font-variant-east-asian (en-US)等属性的简写。你也可以使用简写 font 设定font-variant在 CSS Level 2 (Revision 1) 中的值(即normal 或 small-caps)。
<'font-weight'> – font-weight CSS 属性指定了字体的粗细程度。一些字体只提供 normal 和 bold 两种值。 <'font-stretch'> – font-stretch 属性为字体定义一个正常或经过伸缩变形的字体外观,这个属性并不会通过伸展/缩小而改变字体的几何外形,如font-feature-settings和font-variant属性,它仅仅意味着当有多种字体可供选择时,会为字体选择最适合的大小。 <'font-size'> – font-size CSS 属性指定字体的大小。因为该属性的值会被用于计算 em 和 ex 长度单位,定义该值可能改变其他元素的大小。
<'line-height'> – line-height CSS 属性用于设置多行元素的空间量,如多行文本的间距。对于块级元素,它指定元素行盒(line boxes)的最小高度。对于非替换的 inline 元素,它用于计算行盒(line box)的高度。 <'font-family'> – CSS 属性 font-family 允许您通过给定一个有先后顺序的,由字体名或者字体族名组成的列表来为选定的元素设置字体。 ```

应用举例

设置 font 非简写的写法 css .text{ font-style: oblique; font-weight: normal; font-size: 1em; line-height: 1.8; font-family: Arial, sans-serif; }

设置 font 简写的写法 css .text{ font: oblique normal 1em/1.8 Arial, sans-serif; }

2.3 简写属性:background

background 是一种 CSS 简写属性,用于一次性集中定义各种背景属性, 包括 color, image, origin 与 size, repeat 方式等等。

可以在一次声明中定义一个或多个属性:background-clip、background-color、background-image、 background-origin、background-position、background-repeat、background-size, 和 background-attachment。

```md ① background-clip:设置元素的背景(背景图片或颜色)是否延伸到边框、内边距盒子、内容盒子下面。 可选值有: border-box:背景延伸至边框外沿(但是在边框下层)。 padding-box:背景延伸至内边距(padding)外沿。不会绘制到边框处。 content-box:背景被裁剪至内容区(content box)外沿。 text:背景被裁剪成文字的前景色。

② background-color:设置背景色

③ background-image:设置背景图

④ background-origin:规定了指定背景图片background-image 属性的原点位置的背景相对区域。 注意:当使用 background-attachment 为 fixed 时,该属性将被忽略不起作用。 可选值有: border-box:背景图片的摆放以 border 区域为参考; padding-box:背景图片的摆放以 padding 区域为参考; content-box:背景图片的摆放以 content 区域为参考; inherit:设置该属性会使子元素属性和父元素相同。实际上,就是 "开启继承"。

⑤ background-position:为每一个背景图片设置初始位置。这个位置是相对于由 background-origin 定义的位置图层的。

⑥ background-repeat:定义背景图像的重复方式。背景图像可以沿着水平轴,垂直轴, 两个轴重复,或者根本不重复。设置背景图时,这个值很关键。

⑦ background-size:设置背景图片大小。图片可以保有其原有的尺寸,或者拉伸到新的尺寸, 或者在保持其原有比例的同时缩放到元素的可用空间的尺寸。 注意:没有被背景图片覆盖的背景区域仍然会显示用background-color属性设置的背景颜色。 此外,如果背景图片设置了透明或者半透明属性,衬在背景图片后面的背景色也会显示出来。

有趣的是,它有两个值 contain 和 cover,是的和 object-fit 的那两个值一样,表达的意义和所起的效果也一样。

⑧ background-attachment:决定背景图像的位置是在视口内固定,还是随着包含它的区块滚动。

/* 关键 属性值: scroll,fixed 和 local*/ // 此关键属性值表示背景相对于元素本身固定,而不是随着它的内容滚动(对元素边框是有效的)。 background-attachment: scroll;

// 此关键属性值表示背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容滚动。 background-attachment: fixed;

// 此关键属性值表示背景相对于视口固定。即使一个元素拥有滚动机制,背景也不会随着元素的内容滚动。 background-attachment: local;

```

设置 background 的非简写写法 css .text { background-color: #3ff5e1; background-image: url(/bg.png); background-repeat: no-repeat; background-position: top right; }

设置 background 的简写写法 css .text{ background: #3ff5e1 url(/bg.png) no-repeat top right; }

下面是一个利用简写属性 background, 设置渐变+透明背景色的示例:

css .box{ background: linear-gradient( 270deg, rgba(255, 255, 255, 0.17) 0%, rgba(255, 255, 255, 0.21) 52%, rgba(255, 255, 255, 0.24) 100% ); }

2.4 简写属性:border

border 用于设置各种单独的边界属性的简写属性。border 可以用于设置一个或多个以下属性的值: border-width, border-style, border-color。

语法提示:

```md border: || ||

line-width:边框宽度

line-styly:边框样式,具有8种值,如下: solid 实线 dotted 圆点虚线 dashed 方形虚线 double 双实线 groove 有雕刻效果的边框 ridge 有浮雕效果的边框 inset 有陷入效果的边框 outset 有突出效果的边框

color:边框颜色 ```

下面是简写属性 border 的应用示例和效果图

```html

CSS 简写属性 li{width: 400px;height: 20px;margin-bottom: 20px;border: 5px solid #42b983; /实线/}li:nth-of-type(2) {border: 5px dotted #42b983; /圆点虚线/}li:nth-of-type(3) {border: 5px dashed #42b983; /方形虚线/}li:nth-of-type(4) {border: 5px double #42b983; /双实线/}li:nth-of-type(5) {border: 5px groove #42b983; /有雕刻效果的边框/}li:nth-of-type(6) {border: 5px ridge #42b983; /有浮雕效果的边框/}li:nth-of-type(7) {border: 5px inset #42b983; /有陷入效果的边框/}li:nth-of-type(8) {border: 5px outset #42b983; /有突出效果的边框/}

  • CSS 简写属性:border solid 实线
  • CSS 简写属性:border dotted 圆点虚线
  • CSS 简写属性:border dashed 方形虚线
  • CSS 简写属性:border double 双实线
  • CSS 简写属性:border groove 有雕刻效果的边框
  • CSS 简写属性:border ridge 有浮雕效果的边框
  • CSS 简写属性:border inset 有陷入效果的边框
  • CSS 简写属性:border outset 有突出效果的边框

```

2.5 简写属性:margin 和 padding

margin 和 padding 是最常用的两个简写属性,它们的简写规则一样,如下:

```md 当只有一个值声明时,该值会用于所有四个值。 例如 margin: 5px,表示上下左右的外边距都是 5px。

当只有两个值声明时,第一个值用于上边距和下边距,第二个值用于左边距和右边距。 例如 margin: 5px 10px,表示上下外边距为 5px,左右外边距为 10px。

当有三个值声明时,第一个值用于上边距,第二个值用于左边距和右边距,第三个值用于下边距。 例如,padding: 5px 10px 20px,表示上内边距为 5px,左右内边距为 10px,下外边距为 20px。

当有四个值声明时,其会按顺序用于上、右、下、左边距(按顺时针)。 例如,padding: 5px 10px 15px 20px,表示上内边距为 5px,右为 10px,下为 15px,左为 20px。 ```

需要注意的是,行内元素的边距和宽高的特殊性。以 span 为例的行内元素的宽高边距有效性:

width:无效。height:无效。

margin:left和right有效,top和bottom无效。

padding:left和right有效,top会覆盖前面的元素,bottom会和后面的元素重叠。

三、简写的优缺点

3.1 简写的优点

简写属性是可以让你同时设置好几个 CSS 属性值的 CSS 属性。使用简写属性, Web 开发人员可以编写更简洁、更具可读性的样式表,节省时间和精力。

例如下面这两种写法:

background 简写的写法 css .text{ background: #5B9BD5 url(/bg.png) no-repeat bottom left; }

background 非简写的写法 css .text{ background-color: #5B9BD5; background-image: url(/bg.png); background-repeat: no-repeat; background-position: bottom left; }

又如下面的例子:

padding 的简写写法 css /*表示设置上下左右内边距为:10px*/ .text{ padding: 10px; } padding 的非简写写法 css .text{ /*设置上下左右内边距为:10px*/ padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; }

上面的两个例子可以明显看出简写属性的好处:更简洁,更少的代码,更节约时间(前提是你掌握并熟悉这些写法)。事实上,css 简写属性的应用, 也是很多规范检测工具和开发工具倡导的,它们通常会通过给可以简写但没有简写的代码,给出类似波浪线的预警提示, 就像下面这样:

3.2 简写的缺点

CSS 规范定义简写属性的目的在于将那些关于同一主题的常见属性的定义集中在一起。 注意是同一主题,也就是说简写是有规则的,这就意味着你需要花更多时间去记忆和熟练这些写法。

此外,简写属性语言通常不够友好,例如

语义不够友好的写法 css .text{ padding: 10px 20px 5px 15px; }

语义更好的写法,可以很快很容易看出上下左右的边距是多少。 css .text{ /*设置上下左右内边距为:10px,20px,5px,15px*/ padding-top: 10px; padding-right: 20px; padding-bottom: 5px; padding-left: 15px; }

还有例如, background: #5B9BD5 url(/bg.png) no-repeat bottom left;padding: 2px 5px 4px, 不熟悉简写语法的人,会有理解解读负担。也有说法说,简写属性的性能开销更大(但我认为这应该影响不大, 但是如果你只需要设置上边距,那么 padding-top 可能比 padding 更合适)。

综上,使用 CSS 简写属性的缺点有:

①学习成本更大,需要记忆简写语法。

②语义不友好,记忆理解负担更大。

③会附加可能不想要的初始值。对于所有简写属性,任何没有被指定的值都会被设定为它们的初始值,但是这个初始值可能不是你想要的, 有时会带来麻烦,所以,当你仅是设置某一个值时,不必使用简写属性,因为那会附带一些别的初始值。

四、写在后面

①请注意浏览器兼容性,尽管大多数现代浏览器已经完全支持这些简写属性。

②简写属性没有指定的值会被设置为它的初始值,这意味着,在简写属性中没声明某个具体值,它将会覆盖之前设置的值。 例如设置了 background-color: blue;后面又设置了 background: url(/bg.png) no-repeat top right; 最后 background-color 的值会是默认值 transparent,而不是 blue。背景图并不代表背景色,那是两个属性,尽管背景图可能挡住了背景色。

③关于简写属性的值的顺序,当各个属性的值使用不同类型表示时,顺序很随便。但是当这些属性的值是相同类型的时,它们的顺序就是特定的。 例如 border: dotted 5px #42b983; 和 border: 5px dotted #42b983;是一样的效果。 但是 padding: 5px 6px; 和 padding: 6px 5px; 则是不同的意义。

双18期|CSS揭秘之简写属性相关推荐

  1. (18)css常用样式—定位属性

    一.定位属性position 前面我们已经了解过布局相关的盒模型.浮动等属性,而定位是另一种布局的重要属性,常用于制作压盖或者位置相关的效果. 属性名:position 属性值:relative 相对 ...

  2. CSS边框、边距、轮廓(边框宽度/颜色/各边/简写属性/圆角边框/内外边距/高度宽度/框模型/轮廓宽度/颜色/属性/偏移)——万字长文|一文搞懂

    目录 CSS边框 CSS 边框属性 CSS 边框样式 实例 CSS 边框宽度 实例 特定边的宽度 实例 CSS 边框颜色 实例 特定边框的颜色 实例 HEX 值 实例 RGB 值 实例 HSL 值 实 ...

  3. css设置title字体_CSS中简写属性要注意TRouBLe的顺序,避免踩坑

    简写属性是用于同时给多个属性赋值的属性.比如font是一个简写属性,可以用于设置多种字体属性.它指定了font-style.font-weight.font-size.font-height以及fon ...

  4. [css] 举例说明css有哪些简写的属性和属性值?

    [css] 举例说明css有哪些简写的属性和属性值? border: solid 1px red;border-style: solid; border-width: 1px; border-colo ...

  5. colordialog通过哪属性取其颜色_IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值1...

    CSS中的样式属性比较多,经常使用的属性可以分为这么几类:字体.文本.背景.位置.边框.列表,以及其他一些样式属性.每个类中的属性都可以单独使用:如果同一个类中多个属性一起使用,还可以将它们整合为一行 ...

  6. CSS常用属性-3.1字体文字-1.字体font-family-2.尺寸font-size-3.样式font-style-4.粗细font-weight-5.简写属性font

    1.字体 使用font-family属性来定义文字的字体 属性值为字体的名称,可以设置多个字体名称,浏览器会按照顺序使用它第一个支持的字体(本地电脑有没有安装改字体) 相当于 字体优先级列表 介绍几个 ...

  7. 《精彩绝伦的CSS》——选择器(一)简写属性值

    四.简写属性值  属性值的简写在使用时很方便,但如果省略了部分关键属性时,缺失部分则会使用该属性的默认值.

  8. CSS行高、字体简写属性、文本样式学习笔记

    目录 一 行高 二 字体的简写属性 三 文本的样式 一 行高 行高:line-height,指的是文字占有的实际高度,可以通过line-height设置行高. 行高可以直接指定一个大小,单位可以是px ...

  9. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

最新文章

  1. 【AIX 命令学习】创建逻辑卷!
  2. SAP 物料分类账常用表
  3. 将数据库的0和1显示为jsp页面的是和否
  4. Python 国产库推荐之 musicpy
  5. 利用Word2010给汉字添加汉语拼音
  6. How to remove live visual tree?
  7. eclipse myeclipse 快捷键
  8. appium + python 搭建
  9. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
  10. CMMI3—CMMI5认证的详细流程
  11. Java基础——类和对象
  12. python根据经纬度算距离 怎么输出_python根据经纬度计算距离示例
  13. Win10 快捷操作
  14. python 简单易懂的验证码识别
  15. 关于奇异值分解的一些讨论
  16. PX4添加外置IMU传感器MPU-9250
  17. 软件体系结构--《Software.architecture.perspectives.on.an.emerging.discipline》
  18. 长生诀linux架设教程,手游【长生诀】VM一键即玩服务端+GM工具+图文教程
  19. 【python】 给目录内文件批量改名
  20. JS_02_函数_运算符_循环

热门文章

  1. 五国启动税务执法联盟以解决加密货币网络犯罪威胁
  2. response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
  3. 2021免费大容量OneDrive + office 365桌面版 (a1 a1p)
  4. 微信小程序获取今日天气预报api 免费接口
  5. 一、微信支付介绍和接入指引
  6. js 将字符串中的大写变成小写,小写变成大写
  7. echarts各种字体颜色的修改
  8. 网络中超难的75道逻辑题及答案
  9. imx6ul 时钟初始化流程
  10. FAST-LIO公式推导