0

0

css属性值语法的详细介绍

黄舟

黄舟

发布时间:2017-10-25 09:58:22

|

1983人浏览过

|

来源于php中文网

原创

万维网联盟(w3c) 使用了一套特别的语法来定义 css 的属性值,能让所有的 css 属性都用。如果你曾看过 css 规范,你可能已经见过这套语法了。就像 

border-image-slice

 的语法 ,让我们看看:

<'border-image-slice'> = [ | ]{1,4} && fill?

如果你不知道这些符号以及它们如何工作的话,这套语法可能非常难理解。然而,这值得花时间来学。如果你理解 W3C 是如何定义这些属性值的,你就可以理解 W3C CSS 规范 中任意一个了。

css属性值语法的详细介绍

巴科斯范式

首先,我们看看巴科斯范式(Backus-Naur Form),因为这能帮我们理解 W3C 的属性值语法。

Backus–Naur Form (BNF) 是用来描述计算机语言语法的正式符号集。它被设计得很清晰,所以在语言如何表达方面不会造成二义或者模糊。

最初 Backus-Naur 符号集有很多的扩展与变种在今天都在使用,包括 扩展巴科斯范式(EBNF)和扩充巴克斯范式(ABNF).

一个 BNF 规范是按下面的形式编写的一套规则:

  ::=  __expression__

式子左边通常是一个非终止符,跟着一个 

立即学习前端免费学习笔记(深入)”;

::=

 符号,代表着“可被换为”。式子右边 

__expression__

由一或多个符号序列组成,这些符号序列被用来推导左侧符号的意义。

BNF 规范从根本上说,“无论左侧式子是什么,也无论右侧式子是什么,左侧的式子都能被右侧的式子替换”。

非终止符与终止符

非终止符是指能在之后被替换或被分解的符号。在 BNF 中,非终止符通常都在尖角括号中,

<

 与 

PHP高级开发技巧与范例
PHP高级开发技巧与范例

PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书

下载
>

。在下面的例子中,

 和 

 是非终止符。

  ::=   | 

终止符表明这个值不能被替换或者分解。在下面的例子中,所有的数值都是终止符。

  ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

CSS 属性值语法

尽管 W3C CSS 属性值语法是基于 BNF 的概念,它们也有一些不同。像 BNF 的是,它起始于一个非终止符。不像 BNF 的是,它还描述了用在表达式中作为“成分值(component values)”的符号。

在下面的例子中,

 是非终止符,而 

thin

medium

 和 

thick

 是成分值。

  =   | thin | medium | thick

成分值

有四种成分值:关键字、基本数据类型、属性数据类型与非数据数据类型。

1. 关键字值

关键字值不被引号或尖角括号包围。它们可直接作为属性值。因为它们不能再被代替或分解,所以它们是终止符。在下面的例子中,

thin

medium

 和 

thick

 都是关键字值。这意味着它们在 CSS 中直接使用。

  =   | thin | medium | thick

2. 基本数据类型

基本数据类型定义了一些核心值,如 

 与 

。它们是非终止符,因为它们可以被替换成真实的长度或颜色值。在下面的例子中 

 是基本数据类型。

<'background-color'>  =  

 可在我们的 CSS 中,通过关键字,扩展关键字,RGB、RGBA、HSL、HSLA,或 

transparent

 关键字,被替换为实际的颜色值。

.example { background-color: red; }
.example { background-color: honeydew; }
.example { background-color: rgb(50%,50%,50%); }
.example { background-color: rgba(100%,100%,100%,.5); }
.example { background-color: hsl(280,100%,50%); }
.example { background-color: hsla(280,100%,50%,0.5); }
.example { background-color: transparent; }

3. 属性数据类型

属性数据类型定义了属性实际的名字,是非终止符。它由包含在尖角括号中的属性名(包含引号)定义。在下面的例子中,

<'border-width'>

 是属性数据类型。

<'border-width'>  =  {1,4}

属性数据类型可作为属性直接出现在我们的 CSS 文件中。在下面的例子中,

border-width

 属性给 

.exmplate

 类定义了 2px 的边框。

.example { border-width: 2px; }

4. 非属性数据类型

非属性数据类型并不与属性分享同一个名字,是非终止符。然而,它定义了某个(些)属性的一些层面。例如,

 不是个属性,但它是一个定义了各种 

 的数据类型。

  =   | thin | medium | thick
<'border-width'>  =  {1,4}

成分值组合器(Combinator)

使用下面的五个方法,成分值能被分配至属性值组合器:

1. 相邻值

成分值接连而写意味着所有这些值都必须按给定的顺序出现。在下面的例子中,语法列出了三个不同的值:

value1

value2

 与 

value3

。在 CSS 规则中,这三个值必须按照正确的顺序出现才算合法。

/* Component arrangement: all in given order */
<'property'> = value1 value2 value3
/* Example */
.example { property: value1 value2 value3; }

2. 双与符号(&)

分开两个或更多成分值的双与符号(

&&

)意味着,这些值必须出现,顺序任意。在下面的例子中,语法列出了两个值,由双与符号分开。下面的 CSS 规则说明了这两个值都得出现但可能是不同的顺序。

/* Component arrangement: all, in any order */
<'property'> = value1 && value2
/* Examples */
.example { property: value1 value2; }
.example { property: value2 value1; }

3. 单管道符号

分开两个或更多成分值的单管道符号(

|

)意味着,这些值中只需一个值出现。在下面的例子中,语法列出了三个值,由单管道符号分开。在下面的 CSS 规则中展示了三个可能选项:

/* Component arrangement: one of them must occur */
<'property'> = value1 | value2 | value3
/* Examples */
.example { property: value1; }
.example { property: value2; }
.example { property: value3; }

4. 双管道符号

分开两个或更多选择的双管道符号(

||

)意味着,这些值中一个或多个值必须出现,顺序任意。在下面的例子中,语法列出了三个值,由双管道符号分开。在你写 CSS 规则来匹配这个语法时,有大量可选的选择 —— 你可以使用一个,两个或三个值,以任意顺序。

/* Component arrangement: one or more in any order */
<'property'> = value1 || value2 || value3
/* Examples */
.example { property: value1; }
.example { property: value2; }
.example { property: value3; }
.example { property: value1 value2; }
.example { property: value1 value2 value3; }
...etc

5. 中括号

包住了两个或更多选择的中括号(

[ ]

)意味着其中的成分值属于一个单独的组。在下面的例子中,语法列出了三个值,但其中两个在中括号中,所以它们属于一个组。所以在 CSS 规则中有两种选择:

value1

 与 

value3

 或 

value2

 与 

value3
/* Component arrangement: a single grouping */
<'property'> = [ value1 | value2 ] value3
/* Examples */
.example { property: value1 value3; }
.example { property: value2 value3; }

成分值累乘器(Multipliers)

使用下列 8 个方法之一,成分值也可被重用:

1. 
?

问号(

?

)表明其之前的类型,关键字或者组,是可选的且出现零次或一次。在下面的例子中,第二个成分值与一个逗号一起放在了中括号里。放置其后的问号意味着,

value1

 必须出现,但我们也可使用 

value1

 和 

value2

,以逗号分隔。

/* Component multiplier: zero or one time */
<'property'> = value1 [, value2 ]?
/* Examples */
.example { property: value1; }
.example { property: value1, value2; }

2. 
*

星号(

*

)表明其之前的类型,关键字或者组出现零次或更多次。在下面的例子中,第二个成分值与一个逗号一起放在了中括号里。放置其后的星号意味着,

value1

 必须出现,但我们也能随我们想地使用 

value2

 任意次,每个成分值以逗号分隔。

/* Component multiplier: zero or more times */
<'property'> = value1 [,  ]*
/* Examples */
.example { property: value1; }
.example { property: value1, ; }
.example { property: value1, , ; }
.example { property: value1, , , ; }
...etc

3. 
+

加号(

+

)表明其之前的类型,关键字或者组出现一次或更多次。在下面的例子中,放置于成分值之后的加号意味着该值必须被使用超过一次 —— 无需逗号。

/* Component multiplier: one or more times */
<'property'> = +
/* Examples */
.example { property: ; }
.example { property:  ; }
.example { property:   ; }
...etc

4. 
{A}

大括号(

{A}

)中包含一个数字表明其之前的类型,关键字或者组出现 

A

 次。在下面的例子中,value 的两个实例都必须根据出现才合法。

/* Component multiplier: occurs A times */
<'property'> = {2}
/* Examples */
.example { property:   ; }

5. 
{A,B}

大括号(

{A,B}

)中包含由逗号分开的两个数字表明其之前的类型,关键字或者组出现至少 

A

 次,至少 

B

 次。在下面的例子中,最少一个、最多三个值肯能被用来定义该属性。这些成分值不以逗号分离。

/* Component multiplier: at least A and at most B */
<'property'> = {1,3}
/* Examples */
.example { property: ; }
.example { property:  ; }
.example { property:   ; }

6. 
{A,}

在 

{A,}

 中 

B

 被省去了,这意味着至少有 

A

 次重复,而没有上限。在下面的例子中,至少需要使用一个成分值,但也可以额外使用任意数量的成分值值。这些成分值不以逗号分离。

/* Component multiplier: at least A, with no upper limit */
<'property'> = {1,}
/* Examples */
.example { property: ; }
.example { property:  ; }
.example { property:    ; }
...etc

7. 
#

井号(

#

)表明其之前的类型,关键字或者组出现一次或多次。在下面的例子中,一个或多个成分值可能被使用,这些成分值以逗号分离。

/* Component multiplier: one or more, separated by commas */
<'property'> = #
/* Examples */
.example { property: ; }
.example { property: , ; }
.example { property: , , ; }
...etc

8. 
!

一个组后的感叹号(

!

)意味着该组是必须的且产生至少一个值。在下面的例子中,

value1

 是必须的,以及一个来自与由 

value2

 与 

value3

 组成的组的值。该属性只有两个属性值;它们是,

value1

与 

value2

 或 

value1

 与 

value3



/* Component multiplier: required group, at least one value */
<'property'> = value1 [ value2 | value3 ]!
/* Examples */
.example { property: value1 value2; }
.example { property: value1 value3; }

一个例子:
<'text-shadow'>
 语法

让我们把 

<'text-shadow'>

 当作例子观察一番。这是它在规范里的定义:

<'text-shadow'> = none | [ {2,3} && ? ]#

我们可以拆分这些符号:

|

 表明我们可以使用关键字 

none

 或者一个组

#

 表明我们可以使用这个组一次或多次,以逗号分割

在组中,

{2,3}

 表明我们可以使用 2 或 3 个长度值

&&

 意味着我们必须包括所有值,但顺序可以任意

有点棘手的是,

 后有一个 

?

 ,这意味着其可能出现零次或一次。

用简单的话讲,这也可以被写成:

指明了 none 或 一个或多个由逗号分离的组,其中包含了二到三个长度值与一个可选的颜色值。长度值与可选的颜色值可以以任意顺序编写。


这意味着我们能够以很多不同的方式来写 

text-shadow

 属性的值。例如,可以设置其为 

none

:

.example { text-shadow: none; }

我们也可以只写两个长度值,这意味着我们将设置阴影水平与竖直方向的便宜,但不会有模糊半径或者颜色值。

因为没有定义模糊半径,将会使用初始值 

0

;所以,该阴影的边缘会很锋利。由于没有定义颜色,所以阴影将使用文本的颜色。

.example { text-shadow: 10px 10px; }

如果我们使用了三个长度值,我们将会同时定义阴影的水平与竖直方向的偏移和模糊半径。

.example { text-shadow: 10px 10px 10px; }

我们也可以加入颜色,且颜色可以出现在 2 或 3 个长度值的前面或后面。在下面的例子中,red 值可以放在任一长度值的后面。

.example { text-shadow: 10px 10px 10px red; }
.example { text-shadow: red 10px 10px 10px; }

最后,我们也能包含多个文本阴影,写作以逗号分隔的组。阴影效果将从前至后分层应用:第一个阴影在最顶层,其它的层在其后。阴影不能覆盖在文本上。在下面的例子中,红色阴影将在绿***阴影的顶上。

.example {
    text-shadow:
        10px 10px red,
        -20px -20px 5px lime;
}

结论

如果你以写 CSS 为生,了解如何正确地写合法的 CSS 属性值很重要。一旦你了解了不同的值是如何被组合或累乘的,CSS 属性值语法就变得非常容易理解了。然后看 CSS 的规范与写合法的 CSS 都会变得更容易了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

28

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

8

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

31

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

3

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

5

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

35

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

12

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

40

2026.01.26

抖币充值官方网站 抖币性价比充值链接地址
抖币充值官方网站 抖币性价比充值链接地址

网页端充值步骤:打开浏览器,输入https://www.douyin.com,登录账号;点击右上角头像,选择“钱包”;进入“充值中心”,操作和APP端一致。注意:切勿通过第三方链接、二维码充值,谨防受骗

7

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号