CSS会出错吗?

时间:2015-10-16 12:10:07

标签: html css dom

在最近的一次采访中,采访者被问到“ CSS是否会出错?”。

是否有一个解释器在CSS后面工作阻止程序的执行?或者我们可以说CSS没有给出任何错误?我仍然对这个问题的答案感到困惑,因为面试官也没有说什么。

19 个答案:

答案 0 :(得分:37)

CSS本身不会出错,但是语法错误的CSS无法正确呈现。浏览器可能无法理解给定点的含义,因此无法正确格式化页面。

CSS在语法上也是有区别的,其中所有内容都被正确封闭并且行终止,并且根据W3C规范它符合标准。

编辑:(语法正确性和标准合规性的示例) 以下是语法正确的CSS示例,它不会在W3C CSS Validator上验证失败:

p.my-class {
  color : red;
  -moz-border-radius : 3px;
}

虽然这是技术上有效的CSS,但根据CSS 2.1语法的vendor specific extensions部分,应该避免使用它们。它是初始的破折号或下划线,使它们有效。

答案 1 :(得分:17)

我认为问题太广泛而且不具体。 这就是我回答这个问题的方法。

  

CSS会出错吗?

取决于您正在寻找的地方。 在IDE中?确定它会显示验证错误。 在浏览器中?大多数浏览器倾向于忽略CSS验证错误并继续使用其他规则。再次@Kishan Choudhary在另一个答案" CSS"仅指造型语言,语言不能自己提示错误。

替代。问题:我们如何在CSS中验证/调试/查找错误?

  

我们可以说CSS没有出错吗?

这又取决于你所看到的地方。 在开发环境中?是的,几乎所有的Web IDE都可以帮助您找到CSS错误。

在客户端浏览器中?与此同时,您可以打开浏览器控制台/开发人员工具(如果可用),并且可能存在日志错误,例如您在CSS中使用的图像的无效或无法访问的URL。又是CSS语法还是验证错误?nope

  

是否有一个解释器在CSS后面阻止执行   该计划?

是的,每个浏览器都有一个符合W3C标准的内置CSS解释器/解析器并且它是否喜欢阻止执行?不,所有大多数浏览器的正常行为都是忽略(不阻止解释和应用剩余的有效样式规则)CSS验证错误并继续执行其他规则。

更新:处理CSS分析错误的W3指南

层叠样式表2级修订版1(CSS 2.1)规范

4.2 Rules for handling parsing errors

  

在某些情况下,用户代理必须忽略非法样式表的一部分。   此规范将ignore定义为表示用户代理正在解析   非法部分(为了找到它的开始和结束),但是   否则就好像它不在那里一样。 CSS 2.1预留   CSS所有属性的未来更新:值组合和@ -keywords   不包含以短划线或下划线开头的标识符。   实现必须忽略这些组合(除此之外)   由CSS的未来更新引入。)

     

确保现有属性的新属性和新值   可以在将来添加。

CSS语法模块级别3

2.2. Error Handling

  

当CSS出现错误时,解析器会尝试正常恢复,   在返回之前只丢弃最少量的内容   解析正常。这是因为错误并不总是错误 - 新的   语法看起来像一个旧解析器的错误,它是有用的   能够为语言添加新语法而无需担心   包含它的样式表在较旧的UA中完全被破坏。

答案 2 :(得分:16)

CSS中的错误通常不会在浏览器中导致任何错误消息。任何不正确的代码都会被忽略(或者在某些情况下通过假设丢失部分来接受,例如长度单位)。

CSS解析器尝试在每个不正确的代码之后恢复,因此通常它只会影响样式或错误所在的规则,解析器不会只停止解析其余的CSS代码。

某些浏览器会向错误控制台添加警告以查找CSS中的错误,因此开发人员可以打开控制台以查看是否存在任何错误。

答案 3 :(得分:14)

  

CSS会出错吗?

是的,CSS解析器无法理解的任何规则都会导致错误。通常,系统/程序无法处理的任何数据都会导致错误。但是系统最终如何处理该错误是你的问题,它可以是

  1. 忽略错误并继续处理。
  2. 停止这个过程。
  3. CSS解析器不会因错误而停止。它只是将错误日志放入控制台,如果它找到任何无法在specs中解析/提及的无效css属性并忽略(1)所有css规则数据,直到找到下一个;

    正如w3c.org doc所说

      

    UA必须跳过声明,其中包含无效的属性名称或   无效的价值。

    这里UA(用户代理)在我们的例子中意味着浏览器。因此必须跳过无效的css键/值,浏览器供应商可能会选择在devtools / firebug中显示错误,以帮助开发人员修复它。是否依赖浏览器供应商来放置错误日志。

答案 4 :(得分:9)

某些浏览器会在控制台中报告CSS错误。想到了Firefox。

<style> foo { bar: baz; } </style>

导致错误:

  

未知物业'酒吧'​​。宣言下降。 CSS-的error.html:2:11

但是,这不会“阻止程序的执行”。

据我所知,Chrome中没有类似的功能。

答案 5 :(得分:8)

在CSS中没有错误,但您可以在浏览器的控制台中遇到一些错误, 这可能是浏览器给出错误而不是CSS抛出错误。

答案 6 :(得分:8)

我认为“CSS会给出错误吗?”语句含糊不清,但让我们先看一下this link (CSS 2.1 Specification),跳转到 4.2处理解析错误的规则

规范明确规定了如何忽略解析错误,事实上,它说:

This specification
defines ignore to mean that the user agent parses the illegal part (in order to find
its beginning and end), but otherwise acts as if it had not been there

事实上,在同样的情况下,它甚至指定了如何将无效的css转换为有效的css:

User agents must close all open constructs (for example: blocks, parentheses,
brackets, rules, strings, and comments) at the end of the stylesheet. For
example:

@media screen {
  p:before { content: ’Hello

would be treated the same as:

@media screen {
  p:before { content: ’Hello’; }
}

从这个角度看,CSS从不“给出”错误,因为任何错误都会被有效地解析,修复或忽略,但永远不会停止执行规则和解析器。

但是,如果你有一个开发人员在IDE前面与另一个开发人员交谈,我认为在提到IDE的消息时问“CSS是否给出错误”是公平的,事实上,如果我们看一下{ {3}}我们可以在文档中清楚地看到解析器可以给出错误消息,只是直接指示忽略错误的浏览器。

答案 7 :(得分:5)

@om。是的它可以阻止你的程序,但在非常后方的情况下。例如,如果你在元素的宽度上进行中继,并且如果你为元素设置了display:none,并且没有提到返回未定义的情况,那么你的应用程序将会卡住,因为你的参数没有值。

因此它可以防止执行干扰其他语言。

然而,在他们的答案中,其他人如何说,只有css可以为丢失的文件或类似的东西投掷错误,但它不会停止执行应用程序。

但是我看到一个问题,当css属性可以使jquery方法无法正常工作时,jquery throw错误并停止执行应用程序。

答案 8 :(得分:5)

CSS不是真正的编程语言,而是特定于域的语言(https://en.wikipedia.org/wiki/Domain-specific_language)。

与JavaScript或PHP等脚本语言(图灵完整的编程语言)以及Java或C CSS等真正的编程语言相比,它们不会出现错误&#34;因为CSS代码不是真正的程序源代码。

然而,由于任何特定于域的语言CSS都具有语法并且由解释器读取(非常类似于声明性的图灵完整编程语言)。

如果语法不正确(在此测试:https://jigsaw.w3.org/css-validator/#validate_by_input),则CSS无效。这取决于使用的解释器如何处理无效的CSS部分,常见Web浏览器中的解释器不会停止CSS语法错误。

因此无法明确回答这个问题:

  • CSS可能无效(语法)
  • CSS可能会出现&#34;语法错误&#34;
  • CSS不会&#34;给&#34;常见的口译员通常会忽略错误和错误

答案 9 :(得分:4)

答案取决于您如何定义错误

  
      
  1. 如果错误意味着发生意外事件,那么CSS肯定会出错,因为如果你的语法有问题就行不通。

  2.   
  3. 如果错误意味着向浏览器或控制台投放内容,则CSS不会这样做。

  4.   
  5. 如果错误意味着会破坏工作流程并停止执行下一部分代码,那么CSS就不会。

  6.   

如果考虑第2点和第3点,您可能会考虑使用PHP或其他编程语言中的警告等CSS错误。唯一不同的是,在PHP中,我们可以选择将它们打开以在浏览器中输入内容。到目前为止,CSS还没有这样的选择。

答案 10 :(得分:4)

css可以通过这种方式阻止程序,如果你有按钮并且某些css属性不允许它在你的页面上显示,那么我们可以说它是阻塞的,否则< strong>它不是阻止程序执行。 即使错误也不会阻止执行,只是错位或显示不正确的内容

答案 11 :(得分:3)

不,CSS永远不会出错。您将无法在控制台或CSS导致的任何地方看到任何错误。

由于CSS只是样式语言,如果某些内容未按预期进行样式设置,则不会将其报告为错误。

要注意我们有错误的CSS代码,我们必须查看页面,页面上的一些元素将按预期呈现。调试CSS代码有一些技巧。

答案 12 :(得分:3)

“CSS会出错吗?” - 没有

CSS本身不会出错。如果它不正确,它将忽略该属性。如果存在语法错误,那么它也将忽略相同的情况,如果由于语法错误(如缺少'}'而导致任何其他选择器受到影响)也将被忽略。

有各种IDE(如visual studio)突出显示您的错误。 正如gabe3886告诉你的那样,你也可以使用W3C CSS Validator

来验证语法

答案 13 :(得分:3)

CSS渲染是浏览器(或类似的)的过程,并且不打算“抛出错误”(异常等)。 ...理论上。

(libs / dependencies中的错误可能会导致真正的错误,例如某些字符组合会破坏更大的操作系统。这些错误在所有操作系统及其他操作系统上都有详细记录,但在此查询的边缘操作)< / em>的

我从很多方面读过很多次,每个浏览器都需要一个兼容的CSS功能,并尽可能快地“吸收”错误或错误的语法恢复。有一个CSS解释器挂起(错误)是完全可能的,但我总是认为CSS解析的最终实现是Python中主要反模式的一种风格:

# bad code, just some theory, my Python code "always works"
try:
    # code
except:
    pass

吞下任何和所有错误。

正如其他人所说,“CSS会给出错误吗?”是一个坏或可能是技巧的问题。 CSS是语法或语言。

所以这是真正的交易:语言没有错误,也没有错误容量。只有语言的解释可能会提供错误(作为评估的产物)。只有评估才有能力发现错误。

如果在问题中添加术语“解析器”然后是YES,则CSS解析器会给出错误。但是当这个短语代表你的(未经编辑的)帖子时,我会回答一些语言呐喊 - 一个$$和一个小CS-101:不,这就是为什么......

来自程序员+语言学家的0.02美元。

答案 14 :(得分:3)

html是一种标记语言,它不包含错误,因此css为 如果出现问题,它会尝试显示正确的标记 css没有错误,但 警告 正如我们在控制台中看到的那样,特定属性 无效
比如在-webkit-safari

中查看时使用mozilla

答案 15 :(得分:3)

不,“CSS不会出错”,但我认为面试官可能误解了这个问题。

如果面试官没有错误地陈述这个问题,那么我们可以明确地说不,CSS不会给出错误。 CSS规范中没有评估程序或编译器可以扫描您的级联,查找错误。甚至可以说 browsers 没有CSS的错误处理,因为所有常用的浏览器实际上丢弃了错误编写的声明然后搜索最近的分号,然后回到读取级联

Tab Atkins Jr has a good explanation of how browsers handle errors in CSS以及他们为什么这样处理它们。

  

如果浏览器正在尝试解析声明并遇到它不理解的内容,它会抛弃声明,然后向前搜索直到找到不在{},[]或(不在其中的分号)阻止。

因此,如果面试官试图解决这个问题,我认为你可以自信地回答不,CSS没有给出错误。但是,面试官可能不太了解CSS或浏览器如何解释CSS并且希望您在CSS块中找到错误。面试官在问他们问题时可能会有什么意思,或者对你来说听起来不清楚时,不要害羞。

答案 16 :(得分:2)

  

CSS 是否有错误?   CSS是否可以独立使用它自己分离的#34;编译器&#34;?

当然,不是,对于CSS来说,浏览器是执行过程的一个组成部分,它会在CSS自身的情况下产生错误。

  

实施例       

#foo{
    Bar: 50%;
    Nonsense: 100%;
    color: red
    }

在这种情况下,浏览器将忽略Bar ans Nonsense礼仪并跳转到颜色适当性。并且您将没有异常或错误抛出,与 JS (仅用于比较)不同。 所以明显的答案是否!

答案 17 :(得分:2)

是的,完全正确的CSS有时也可以给出错误,但它不是通过错误,而是在语法出错之后停止样式。

<强> CSS

.myClass {
    color : red
    background-color : green;
}
  

此代码将给出错误,而在这种情况下代码将不会执行。

答案 18 :(得分:1)

在结论中我可以用@Kishan Choudhary的话说“CSS是否会出错?” - 没有

但可能存在解析和浏览器错误。

这些观点有助于我得出结论。

  1. CSS本身不会出错。 (@ gabe3886)
  2. 通常,CSS中的错误不会在浏览器中导致任何错误消息。任何不正确的代码都会被忽略 规范明确指定了应如何忽略解析错误。 (@Guffa)
  3. CSS解析器不会因错误而停止。它只是将错误日志放入控制台,如果它找到任何无法在规范中解析/提及的无效css属性,并忽略(1)所有css规则数据,直到找到下一个; (@rajuGT)
  4. 必须跳过无效的css键/值,浏览器供应商可能会选择在devtools / firebug中显示错误,以帮助开发人员修复它。 (@rajuGT)
  5. “CSS会出错吗?” - 没有| CSS本身不会出错。如果它不正确,它将忽略该属性。 (@Kishan Choudhary)
  6. 但是,由于任何特定于域的语言CSS都具有语法并且由解释器读取(非常类似于声明性的图灵完整编程语言)。 (@Blackbam)
  7. 是的,它可以阻止您的程序,但在非常后方的情况下。 (@George Plamenov Georgiev)
  8. CSS从不“给出”错误,因为任何错误都将被有效地解析和修复或忽略,但永远不会停止执行规则和解析器。 (@Eduardo Wada)
  9. 是的,完全正确的CSS有时也可以给出错误,但它不是通过错误,而是在语法出错之后停止样式。 (@Kamal Kumar)
  10. 大多数浏览器倾向于忽略CSS验证错误并继续使用其他规则。 (@DeshanR)
  11. 在控制台中,如果背景图片路径不正确,则会显示如下错误:无法加载资源:net :: ERR_FILE_NOT_FOUND(@om)
  12. @om,那不是CSS抛出错误。这是浏览器给出错误,因为它无法加载资源。 (@Farzad YZ)
  13. 谢谢你们。