CSS是一种层叠样式表语言。

52

CSS是什么类型的语言?

我的第一反应是将其称为标记语言...但它并不符合该模式:

标记语言是一种用于以与文本明显不同的语法注释文本的系统。-维基百科

CSS使用各种选择器将属性应用于HTML中的元素,HTML是一种标记语言。


2
我认为随着 CSS 的发展,它会变得更容易描述。最近的一些有趣的增强功能,比如声明元素在某些事件上的动画能力,也是其中之一。 - Finbarr
5个回答

40

我认为它是一种领域特定的声明性语言。


这可能是正确的,但它并不是一个有用的定义;因为大多数XML应用本质上都是DSDL,还有很多其他东西也是。 - Williham Totland
3
当你知道领域是什么时,DSDL定义就变得有用了。 :) - Vivin Paliath
1
@Vivian Paliath:是的;但是将某物定义为DSDL并不特别如此。 - Williham Totland
5
这是一个广泛的类别,但我不确定除了说它是一种样式表语言之外是否还能更具体一些,这有点像说HTML是一个超文本标记语言。 - Nick Van Brunt
现在,与在html中使用预制类(例如.red-heading)相比,我会说CSS是必要的。使用包含一组样式的视觉描述类是声明性的,因为它描述了要做什么,但不描述如何做。手写CSS规则集在现代Web开发实践中是必要的。 - papiro
我同意这篇文章。对于那些感兴趣的人,可以阅读劳埃德(1994)关于声明式编程的论文(位于http://www.programmazionelogica.it/wp-content/uploads/2015/12/GP1994-I-000-031.pdf的第10页)。声明式编程关注于“什么”(例如数据呈现),而命令式编程则指定“如何”(例如生成/修改数据)。 - kexxcream

5

CSS在语法上是两种语言的混合体:选择器语言是一种模式匹配语言,类似于正则表达式或xpath;属性语言可以被归类为“过程性声明”,因为属性本质上是赋值运算符。就主观层面而言,CSS显然是一个丑陋的混乱,就像语言设计领域的其他集体努力的成果一样(“马是委员会设计的骆驼”)。


16
……而C++则像是在一只狗身上钉上额外的腿,变成了一只章鱼。 - Michael Borgwardt
@Michael:这实际上是对C++的一个相当准确的描述。 - BlueRaja - Danny Pflughoeft
3
我不确定是否应该把CSS的任何部分都称为“过程式”的,除非你在谈论表达式,但我很高兴有人认同CSS是个丑陋的混乱体。当在格式化语言中,居中最好的方法是给它一个margin:auto;属性(和显式的宽度),你就会知道出了什么问题。 - tloflin

4

CSS并不是一个真正的语言,它更像是一种用于描述配置指令的语法。

实际上,它既不是这两者;CSS是一种描述多个标记及其视觉意义的方式;.css文件包含这些标记,以使计算机能够解析它们。CSS声明可以采用SVG文档中name="value"声明的形式;并且.css文件结构也可以轻松地被用来包含单位描述,例如在FreeCiv的特别荒谬迭代中。

维基百科将其定义为样式表语言似乎是对单一现象的概括的一种强制性定义;而且应该清楚地指出,它不是任何标记语言,因为它本身实际上没有标记任何东西。


我完全同意维基百科的定义有些牵强。 - Derek Adair
1
根据W3C的说法,CSS绝对是一种语言,并且至少有三种语言属于这个语言类别:CSS、XPath和XSLT - http://www.w3.org/Style/ - dkinzer
10
为什么CSS不是一门编程语言?很明显,它不是一门编程语言,但它有自己的语法,因此它是一种形式语言。 - el.pescado - нет войне
@el.pescado:显然。但我认为在SO上用“编程”来修饰“语言”这个词似乎是不必要的。 - Williham Totland
使用HTML和CSS编写网页并非编程,严格来说这不是本论坛的主题,但似乎被容忍了。 - starblue
3
CSS确实是一种编程语言。虽然CSS不是“图灵完备”的,但它不需要成为一个“图灵完备”语言才能被称为一种语言。CSS是一种声明式的编程语言,用于改变DOM节点的外观、位置等,在实现细节方面(即如何实现)对用户进行了隐藏和抽象处理。 - Jamil Said

3
CSS绝对是一种语言:
维基百科将CSS称为“样式表语言”。

http://en.wikipedia.org/wiki/Style_sheet_language

来自开发CSS的W3C:(比较

CSS的独特之处在于可以用来为HTML和XML文档添加样式。另一方面,XSL能够转换文档。例如,可以使用XSL将XML数据转换为Web服务器上的HTML/CSS文档。这样,这两种语言互补,可以一起使用。

两种语言都可以用来为XML文档添加样式。

正如第二个句子所示,W3C将CSS称为一种语言。

http://www.w3.org/Style/

以下是同一篇文章中的下一个引用:

W3C开发了除CSS之外的XSL,这事实上引起了一些混乱。为什么要在实现第一种样式表语言之前开发第二种呢?答案可以在下表中找到:

                            CSS     XSL
Can be used with HTML?      yes      no 
Can be used with XML?       yes     yes
Transformation language?     no     yes
Syntax                      CSS     XML

是的,我看到了。这篇文章只给出了一个“样式表”语言的例子...那就是CSS。 - Derek Adair
是的,我也觉得那很奇怪。但或许它是迄今为止唯一的一种。 - dkinzer

2
CSS有着明确定义的语法,因此它是一种语言。如果你必须选择CSS是声明式还是命令式的话,那么它是声明式的。因为其操作结果是由实际解释和处理CSS的程序来决定的。
然而,仅凭CSS无法构建任何有用的东西;它需要一个文档来操作,并且所有CSS所做的就是为文档提供补充信息;因此,CSS实际上是文档的一部分。
CSS的问题在于它作为HTML到DOM生成过程的一部分而被使用;因此CSS的行为类似于“混乱”的全局变量,开发人员不得不处理CSS带来的大量恶心的副作用。
希望CSS的发明者、W3C的重要成员Håkon Wium Lie有一天能意识到,从一开始到现在,CSS都是一个错误,是实现语义标记和表现分离的错误路径。
如今,CCS通过@media查询和@运算符(例如@screen和@print)获得了命令式的特性。但是,没有任何新功能可以纠正CSS的基本缺陷:可怕的全局变量和以其元素选择器为代表的臭名昭著的不合理的副作用。
不幸的是,CSS作为一种语言的研究比真正的编程语言更加复杂,因为如何使用它的示例更多是轶事而不是实用,因此需要全面的CSS框架(如Bootstrap和其他框架)来完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接