详解CSS属性值用法

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

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 中,非终止符通常都在尖角括号中,

<

 与 

Css中margin属性详细解析

Css中margin属性详细解析

Css中margin属性详细解析

Css中margin属性详细解析 310

查看详情 Css中margin属性详细解析

>

。在下面的例子中,


 和 


 是非终止符。
integer>  ::=   |
终止符表明这个值不能被替换或者分解。在下面的例子中,所有的数值都是终止符。
 ::=  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. 属性数据类型

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


 是属性数据类型。

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

border-width

 属性给 

.exmplate

 类定义了 2px 的边框。
.example { border-width: 2px; }

4. 非属性数据类型

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


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


 的数据类型。

 =   | thin | medium | thick
 =  {1,4}

成分值组合器(Combinator)

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

1. 相邻值

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

value1

value2

 与 

value3

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

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

2. 双与符号(&)

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

&&

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

/* Component arrangement: all, in any order */
= value1 && value2

/* Examples */
.example { property: value1 value2; }
.example { property: value2 value1; }

3. 单管道符号

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

|

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

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

4. 双管道符号

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

||

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

/* Component arrangement: one or more in any order */
= 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 */
= [ value1 | value2 ] value3

/* Examples */
.example { property: value1 value3; }
.example { property: value2 value3; }

成分值累乘器(Multipliers)

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

1. 

?

问号(

?

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

value1

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

value1

 和 

value2

,以逗号分隔。

/* Component multiplier: zero or one time */
= value1 [, value2 ]?

/* Examples */
.example { property: value1; }
.example { property: value1, value2; }

2. 

*

星号(

*

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

value1

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

value2

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

/* Component multiplier: zero or more times */
= value1 [, ]*

/* Examples */
.example { property: value1; }
.example { property: value1, ; }
.example { property: value1, , ; }
.example { property: value1, , , ; }
…etc

3. 

+

加号(

+

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

/* Component multiplier: one or more times */
= +

/* Examples */
.example { property: ; }
.example { property: ; }
.example { property: ; }
…etc

4. 

{A}

大括号(

{A}

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

A

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

/* Component multiplier: occurs A times */
= {2}

/* Examples */
.example { property: ; }

5. 

{A,B}

大括号(

{A,B}

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

A

 次,至少 

B

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

/* Component multiplier: at least A and at most B */
= {1,3}

/* Examples */
.example { property: ; }
.example { property: ; }
.example { property: ; }

6. 

{A,}

在 

{A,}

 中 

B

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

A

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

/* Component multiplier: at least A, with no upper limit */
= {1,}

/* Examples */
.example { property: ; }
.example { property: ; }
.example { property: ; }
…etc

7. 

#

井号(

#

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

/* Component multiplier: one or more, separated by commas */
= #

/* Examples */
.example { property: ; }
.example { property: , ; }
.example { property: , , ; }
…etc

8. 

!

一个组后的感叹号(

!

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

value1

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

value2

 与 

value3

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

value1

与 

value2

 或 

value1

 与 

value3

/* Component multiplier: 属性0d group, at least one value */
= value1 [ value2 | value3 ]!

/* Examples */
.example { property: value1 value2; }
.example { property: value1 value3; }

一个例子:


 语法

让我们把 


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

= 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; }
最后,我们也能包含多个属性1,写作以逗号分隔的组。阴影效果将从前至后分层应用:第一个阴影在最顶层,属性2的层在其后。阴影不能覆盖在文本上。在下面的例子中,红色阴影将在绿黄色阴影的顶上。

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

结论

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

如果像拓展阅读,看看下列的网站吧:

“Value Definition Syntax” in “CSS Values and Units 属性3 Level 3”, W3C

“CSS Reference,” Mozilla Developer Network

“How to Read W3C Specs,” J. David Eisenberg, A 属性4 Apart

<!–

详解CSS属性值用法

–>

以上就是详解CSS属性值用法 的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1608011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 21:21:16
下一篇 2025年12月9日 19:00:10

相关推荐

  • 详解css中border-image的使用方法

    border-image-source 属性设置边框的图片的路径[none | ] p { border: 20px solid #000; border-image-source: url(border.png);} border-image-slice 属性图片边框向内偏移[ | ](1,4) …

    2025年12月23日
    000
  • 解析CSS3中nth-child与nth-of-type的区别

    css3中nth-child与nth-of-type的区别其实很简单::nth-of-type为什么要叫:nth-of-type?因为它是以”type”来区分的。也就是说:ele:nth-of-type(n)是指父元素下第n个ele元素, 而ele:nth-child(n)是…

    2025年12月23日 好文分享
    000
  • CSS常用字体属性:background-origin和background-clip介绍说明

    (一)常用的字体属性:       font-weight: 属性值100-900  400等于正常 700等于bold ,数值越大,越粗       font-size:字体大小,单位可以为px或者%       font-family:字体族 比如说:微软雅黑       font-style:…

    好文分享 2025年12月23日
    000
  • CSS中的伪类与伪元素及二者间的区别说明

    这篇文章主要介绍了详解css中的伪类与伪元素及二者间的区别,实际上css3中规范了一种简单粗暴的方法,即伪类前用一个冒号表示,而伪元素前用两个冒号表示,这样就不容易混淆了,需要的朋友可以参考下 CSS伪类的概念及作用CSS伪类(Pseudoclasses)是选择符的螺栓,用来指定一个或者与其相关的选…

    2025年12月23日 好文分享
    000
  • 使用CSS实现文字环绕图片效果

    这篇文章主要为大家详细介绍了css文字环绕图片遇到的问题及解决方法,感兴趣的小伙伴们可以参考一下 CSS实现文字环绕图片效果 文字环绕图片,在Word里只要click一下右键,调一下属性就可以了。但在HTML文档里就没有直接属性了。因此我们可以借助CSS来实现这一效果。 我们先设定float的参数,…

    2025年12月23日 好文分享
    000
  • 利用CSS中linear制作复杂的边框效果实例分析

    这篇文章主要介绍了利用css中linear制作复杂的边框效果实例分析的相关资料,利用linear-gradient属性制作绚丽的边框效果 网上看到一种利用linear-gradient属性制作绚丽边框效果的方法。首先给出代码,大家可以在自己的电脑中查看效果: .box { margin: 80px …

    2025年12月23日
    000
  • 分析CSS样式表、继承、层叠和属性的值

    这篇文章分析CSS样式表、继承、层叠和属性的值  构造样式表并添加注释 1. css里有控制基本格式的属性(如font-size和color等),有控制布局的属性(如position和float等),还有决定访问者打印时在哪里换页的打印控制元素。除此之外还有其他很多的属性。2. 样式表中包含定义网页…

    好文分享 2025年12月23日
    000
  • CSS盒子模型介绍

    什么是css盒子模型?css盒子模型是为了让我们充分理解p+css模型的定位功能,盒子模型在学习p+css布局方式中必须要学习的一个模型 一、什么是CSS? CSS(Cascading Style Sheet):层叠样式表是将网页的内容与样式进行分离的一种语言,也就是在aspx或html中设计网页的…

    2025年12月23日
    000
  • 必看的CSS小知识

    下面小编就为大家带来一篇必看的css小知识。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员都使用过。如果你并不是一个特别有经 验的程序员,我相信你未必知道color属性除了…

    2025年12月23日 好文分享
    000
  • CSS教程之div垂直居中的多种方法

    这篇文章主要为大家详细介绍了css教程之p垂直居中的多种方法,还包括多行文本垂直居中的方法,感兴趣的小伙伴们可以参考一下 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我…

    好文分享 2025年12月23日
    000
  • CSS超出文本指定宽度用省略号代替和文本不换行分析

    这篇文章主要介绍了css超出文本指定宽度用省略号代替和文本不换行的相关资料,小编觉的实用性非常,特此分享到本站平台,供大家参考 一般的文字截断(适用于内联与块): .text-overflow { display:block;/*内联对象需加 */ width:31em;/* 何问起 hovertr…

    好文分享 2025年12月23日
    000
  • CSS等高布局的6种方式介绍

    下面小编就为大家带来一篇css等高布局的6种方式介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前面的话 等高布局是指子元素在父元素中高度相等的布局方式。等高布局的实现包括伪等高和真等高,伪等高只是看上去等高而已,真等高是实实在在的等高。本文将介绍边框模拟、负mar…

    2025年12月23日 好文分享
    000
  • css实现背景透明和文字不透明方法

    这篇文章介绍css实现背景透明和文字不透明方法 实现透明的css方法通常有以下3种方式,以下是不透明度都为80%的写法 css3的opacity:x,x 的取值从 0 到 1,如opacity: 0.8 css3的rgba(red, green, blue, alpha),alpha的取值从 0 到…

    2025年12月23日 好文分享
    000
  • 分析CSS常见兼容性问题的总结

    浏览器的兼容性问题,通常是因为不同的浏览器对同一段代码有不同的解析,造成页面显示不统一的情况。 这里谈到的浏览器,主要指IE6/IE7/IE… FireFox Chrome Opera Safari 等。 但更多的兼容还是考虑IE6/IE7/FF之间的斗争 先来谈谈CSS Hack 我们…

    2025年12月23日 好文分享
    000
  • CSS比较常用的翻转特效

    第一个:360度翻转特效 * { margin:0; padding:0;}.aa { width: 220px; height: 220px; margin: 0 auto; background: no-repeat url(“images/author.jpg”) left top; -web…

    好文分享 2025年12月23日
    000
  • 详解css background-attachment属性进阶

    这篇文章详解css background-attachment属性进阶 前提是定义了background-image属性,然后用background-attachment来指明背景图的位置是固定于视口的,还是随着包含块移动的。可简单理解为定义背景图片随滚动轴的移动方式。  取值: scroll:默认…

    2025年12月23日 好文分享
    000
  • 必看的css布局小技巧分享

    下面小编就为大家带来一篇必看的css布局小技巧分享。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 1.max-width: 当页面左右宽度缩小时,为了避免出现左右滚动条的糟糕体验,就可以用到max-width啦!页面比宽度小时,会自动缩小哦~ max-width : 5…

    好文分享 2025年12月23日
    000
  • 实例讲解使用CSS保持页面内容宽高比方法

    这篇文章实例讲解使用css保持页面内容宽高比方法,作者举了伪元素和vw单元等不同方法下的例子,需要的朋友可以参考下 需求描述:移动端实现横跨页面半圆。(类似问题,实现4×4的正方形网格) 简化问题,我们可以理解为实现一个高度和宽度比为1:2的块。 需要解决问题:        1,高度和宽…

    2025年12月23日 好文分享
    000
  • 将页脚固定在页面底部的CSS实战教程

    这篇文章主要介绍了将页脚固定在页面底部的css实战,其中注意一下css清理浮动的问题,需要的朋友可以参考下 页脚的位置问题 网页的页脚(footer),也就是通常用来放置帮助链接及版权信息的地方。页脚自然是应该位于页面底部的,但依照一般的做法,如果位于页脚之前的网页内容比较少,或者说使用了一个垂直分…

    2025年12月23日
    000
  • 详解CSS元素居中布局的简单方法

    这篇文章主要介绍了详解css元素居中布局的简单方法,文中介绍了内嵌元素和块元素以及行内块三种情况,需要的朋友可以参考下 首先我们需要知道元素都有哪些种类?     内嵌元素(display:inline;)如a,span,b,i 【一个不可定制的盒子】     [默认同行可以继续跟同类型标签]   …

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信