【问题标题】:How to validate vendor prefixes in CSS like -webkit- and -moz-?如何验证 CSS 中的供应商前缀,如 -webkit- 和 -moz-?
【发布时间】:2010-12-25 18:33:20
【问题描述】:

我使用 webkit/mozilla 边框半径和盒子阴影 CSS 属性,但我希望 CSS 能够验证(目前它没有)。有没有办法让它验证?

http://jigsaw.w3.org/css-validator/

【问题讨论】:

  • 验证器会告诉您您的 CSS 是否符合规范。传递包含非标准属性的 CSS 文件的验证器有什么用?你有一些很好的理由来包含非标准属性,那么你为什么要关心它是否在你选择这样做之后验证呢?
  • 也许会重新考虑接受的答案

标签: css w3c-validation vendor-prefix


【解决方案1】:

不,它们是特定于浏览器的属性,并未在标准 CSS 规范中定义。

话虽如此,他们正确地遵循了 CSS 供应商特定扩展的规则。它只是不在 W3C 官方 CSS 规范中。

【讨论】:

  • 根据 W3C 规范,它不是有效的 CSS。您可以尝试将其作为单独的工作表导入主工作表,并查看验证器是否忽略导入,但这只是验证器特定的逻辑。
  • 在这里接受了第一个答案。谢谢。
  • 这个答案仍然有效,但对于验证器维护者自己最近实施的新解决方案(或变通方法),请参阅我的答案。
【解决方案2】:

不,因为它们不是验证器验证所依据的标准的一部分。想到的唯一解决方案是将不兼容的属性放入单独的样式表中。

【讨论】:

    【解决方案3】:

    Mozilla 和 WebKit 的特定属性将无法验证。您可以做的是将“丰富”的 css 分离到单独的样式表中。就像您将 ie hack 样式与主样式表分开一样。这样您的基本样式表就会生效。

    【讨论】:

      【解决方案4】:

      部分可能。将所有不受支持的 css 类收集到一个文件中 (css3.css)

      例子:

      css3.css

        .round{
              -moz-border-radius-bottomleft: 5px; 
              -moz-border-radius-topleft: 5px; 
              -moz-border-radius-topright: 5px; 
              -moz-border-radius-bottomright: 5px;
              border-bottom-left-radius: 5px 5px;
              border-bottom-right-radius: 5px 5px;
              border-top-left-radius: 5px 5px;
              border-top-right-radius: 5px 5px;
              -webkit-border-bottom-left-radius: 5px 5px;
              -webkit-border-bottom-right-radius: 5px 5px;
              -webkit-border-top-left-radius: 5px 5px;
              -webkit-border-top-right-radius: 5px 5px;
          }
      

      default.css

       .square{
              width: 100px;
              height: 100px;
              border: 1px solid #000000;
          }
      

      page.html

      <html>
          <head>
               <link rel="stylesheet" type="text/css" href="default.css">
               <script type="text/javascript">
                    document.write('<link rel="stylesheet" type="text/css" href="css3.css">');
               </script>
          </head>
          <body>
               <div class="square round"></div>
          </body>
      </html>
      

      搜索引擎不运行客户端脚本,因此您的 W3C 不受支持的属性不会损害您的 SEO。 至于绿色 css 验证,抱歉,还没有。

      【讨论】:

      • 爬虫是否会费心尝试验证您的 CSS?当他们主要关注内容时,这似乎是一种惊人的资源浪费。
      【解决方案5】:

      如果您对我的“无效”或“特定于浏览器”的 CSS 使用单独的 CSS 文件,则使用一点 PHP 从验证器中过滤掉该 CSS:

      <?php
      if(preg_match("/jigsaw.w3c.org/i", $_SERVER['HTTP_HOST'])){ 
          echo '<link rel="stylesheet" href="invalid.css" type="text/css" media="screen, projection" />'; 
      }
      ?>
      

      然后链接到以 CSS3 作为配置文件的验证器(接受边框半径、文本阴影等):

      http://jigsaw.w3.org/css-validator/check/referer?profile=css3

      $_SERVER['HTTP_HOST'] 不起作用,但也许有什么可以?

      2011 年 12 月 12 日

      Kami 确实发布了最佳解决方案。我创建了一个单独的 css3.js 文件和 document.write('');一行一行的CSS:

      CSS3.js

      document.write('\
      <style type="text/css">\
      home_low_mod {zoom: 1;}\
      #home_module {-moz-border-radius: 8px;-webkit-border-radius: 8px;-moz-box-shadow: 0px 1px 3px #a5a6a2;-webkit-box-shadow: 0px 1px 3px #a5a6a2;behavior: url(PIE.htc);}\
      #page {-moz-border-radius: 8px 8px 0 0;-webkit-border-radius: 8px 8px 0 0;behavior: url(PIE.htc);}\
      </style>');
      

      【讨论】:

        【解决方案6】:

        虽然供应商扩展的语法是 mentioned in the CSS3 Syntax module 并被引入语法以允许供应商实现自己的前缀而忽略标准,但实际的供应商扩展本身并不被识别为官方 CSS 属性。这不会改变,因为它们是专有的并且特定于发明和使用它们的供应商。

        但是,最近对Jigsaw W3C CSS Validator 的增强 (early 2011) 可以减少由供应商扩展触发的验证错误警告。通过展开更多选项部分,可以找到这个新选项,例如要验证的 CSS 级别:

        如果样式表仍未通过验证,这样可以更轻松地找到样式表的真正问题。如果供应商扩展是唯一会触发错误的东西,那么将它们变成警告将使您的样式表能够暂时验证。它还消除了在单独的样式表中维护供应商扩展的需要,您必须对验证器隐藏。

        警告是您可以避免错误的最远距离,但最终供应商前缀仍然是非标准的,因此在技术上是无效的 CSS。

        【讨论】:

          【解决方案7】:

          @BoltClock TOTALLY 就在这个... W3C 确实添加了vextwarning 级别BOOL 搜索条件。它没有记录在案...但是如果您使用他们的SOAP API validation,您可以将参数添加到您的验证GET 请求的有效负载中......

          &amp;vextwarning=true

          例如...如果您想在 TextMate 中编辑 CSS 验证器命令...您将“编辑捆绑包...”,aka <kbd>⌃</kbd>+++B

          #!/usr/bin/env ruby
          
          print '<html><head><meta http-equiv="Refresh" content="0; URL='
          print 'http://jigsaw.w3.org/css-validator/validator?\
          warning=0&profile=none&usermedium=all&text='
          
          scope = STDIN.read
          …
          

          to - something - 更多类似

          #!/usr/bin/env ruby
          
          print '<html><head><meta http-equiv="Refresh" content="0; URL='
          print 'http://jigsaw.w3.org/css-validator/validator?\
          warning=2&vextwarning=true&profile=css3&usermedium=all&text='
          
          scope = STDIN.read
          …
          

          请注意,我还添加了 level=css3 并更改了 warninglevel。根据 API,根据需要更改这些

          如果您想查看所有通过“在线”提交机制可用的参数......打开 Firebug 或 Webkit 检查器等。 . 通过their form 提交查询并查看full request content 以获得更多选项,根据需要...

          【讨论】:

            猜你喜欢
            • 2011-10-25
            • 1970-01-01
            • 1970-01-01
            • 2014-02-12
            • 1970-01-01
            • 2017-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多