CSS语法检查利器之csslint

这篇具有很好参考价值的文章主要介绍了CSS语法检查利器之csslint。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文于2015年底完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


背景

前段时间研究使用YUI Compressor压缩项目里的js和css文件,研究了两天之后,终于在周三晚上把YUI Compressor集成进了打包流程中;于是周四(2015-11-12)早晨一到办公室,第一件事就是把相关的构建脚本提交至配置库。

从诡异的问题开始

刚高兴没多久,测试MM就发现一个Bug,有个页面的样式出了问题,导致自动化用例执行失败,要求开发尽快处理。

起初没太注意,感觉只是个小问题,于是直接让对应特性的开发责任人去定位。一个小时之后,测试MM过来问进展,我才发现小问题不简单,一个小时过去了,但开发人员并没有找到问题原因。

开发人员很无奈,因为现象确实比较奇怪:

  1. 目前发现仅在Linux部署的那套环境上出现了样式出错的现象;
  2. 在开发人员、测试人员本地搭建的环境上,并没有类似的现象;
  3. 开发人员定位的结果,页面引用的样式文件中,从某个定义开始,后面的样式全部都未生效;
  4. 出问题的页面本周有新特性开发,但引用的样式文件本周并没有人做过更新;

对于现象本身,有来自测试人员进一步的反馈:

  1. 自动化用例验证昨天的版本时,并没有发现样式的问题;
  2. 测试人员反馈,早晨升级Linux环境前,人工验证时并没有发现样式的问题;

结合这些信息,突然想到上午我才把css压缩相关的构建脚本合入配置库,而出现问题的版本正好是使用更新过的构建脚本打包出来的,那么会不会是压缩工具引入的问题?带着这个疑问登录到Linux部署环境上,使用vim查看对应的css文件,有如下发现:

  1. 样式文件被压缩至一行;
  2. 在某一个字符后的内容,没有高亮,感觉像是vim的语法高亮似乎有问题;

由于文件内容压缩之后查看实在辛苦,于是打开eclipse查看问题相关的css文件。这时在开发人员反馈的样式定义附近,找到一处如下的css代码。

#wrapper {
    display: block;
    margin: 0 auto;
    text-align: left;
    min-width": 720px;   看到这行代码的问题了吗?
    max-width: 1000px;
}

问题找到了,原来是开发人员定义样式时,本意是书写min-width: 720px;,但在min-width后面多打了一个",于是成了min-width": 720px;

问题原因

找到这里,我有一个猜测,对于未压缩的样式,浏览器在加载到前述样式定义时,会直接忽略掉min-width的定义,但max-width和后续的样式定义还是有效的;但当样式文件被工具压缩到一行之后,min-width的错误会导致后续的样式定义全部被忽略掉,于是出现了前述测试MM反馈的问题。

为了证实我的想法,决定拿问题环境做个实验,直接在环境上修改css文件。

于是登录Linux环境,使用vim修改对应的css文件,将多余的"删除掉,这时vim的语法高亮恢复了正常。然后使用浏览器登录页面,清除缓存后访问之前有问题的页面,发现页面的样式恢复正常。

问题解决之后

问题虽然解决了,但问题本身值得回味。

css是脚本,和js不同,浏览器在加载css时不会校验语法,遇到错误不报错,反而会安静的忽略。这次的问题发现了,解决了,那么下次呢?下次也要花费三人时来定位和解决吗?这就纠结了,毕竟类似前述的问题靠人眼来检查css文件的语法,其实挺痛苦的。

那么有没有什么工具可以检查css的语法,在开发时就能提前发现问题,避免类似问题发生?在网上搜索了一圈,找到了csslint

csslint

什么是csslint

如下截取自项目主页。

CSS Lint is a tool to help point out problems with your CSS code. It does basic syntax checking as well as applying a set of rules to the code that look for problematic patterns or signs of inefficiency. The rules are all pluggable, so you can easily write your own or omit ones you don't want.

代码主页https://github.com/CSSLint/csslint,在线检查工具http://csslint.net。

使用方法

项目的官方文档非常详细,由此可见项目的开发人员非常用心。从文档看,csslint的使用很简单。

命令行方式

进入命令行,执行如下命令,将检查test.css

java -jar js.jar csslint-rhino.js test.css

与Ant集成

在构建脚本中增加如下的的target

<target name="csslint">       
    <apply executable="java" failonerror="true" parallel="true">
        <fileset dir="${src.dir}" includes="**/*.css" />
        <arg line="-jar"/>
        <arg path="${lib.dir}/js.jar"/>
        <arg path="${lib.dir}/csslint-rhino.js" />      

        <!-- your customized arguments go here -->
        <arg line="--warnings=box-model,floats --errors=ids,important"/>

        <srcfile/>
    </apply>
</target>
  • src.dir,待检查的css文件的存储路径。
  • lib.dir,基于Rhinocsslint工具和jar文件的存储路径。

可以使用antcall来调用名为csslinttarget,注意传入正确的src.dirlib.dir

工具选项

检查报告的格式

使用--format选项可以指定csslint工具以何种格式输出检查报告。

可选的格式

  • text,默认格式。
  • compact,压缩格式,warning类的信息在一行中输出。
  • lint-xml,通用的XML格式。
  • csslint-xml,与lint-xml格式类似。
  • checkstyle-xml,可被CheckStyle工具识别的格式。
  • junit-xml,可被多数CI工具识别的格式。

使用样例

csslint --format=lint-xml test.css 

检查规则

通过在命令行中调用--list-rules可以查看当前使用的csslint支持的规则及描述。

指定检查项和级别

csslint在输出报告时有两种级别,errorwarning。通过使用--warnings--errors可以指定检查过程中启用的检查项及对应的级别;如命令行中未使用--warnings--errors,则默认启用全部的检查项及其级别的定义。

使用样例

如下样例将规则box-modelids定义为warning

csslint --warnings=box-model,ids test.css

如下样例将规则box-modelids定义为error

csslint --errors=box-model,ids test.css

忽略规则

通过使用--ignore选项,可以忽略某些检查规则。

使用样例

csslint --ignore=box-model,ids test.css

嵌入css文件的选项

除了在命令行指定检查项,csslint同时允许将工具运行时的配置信息写入到css文件中,作为文件专属的样式检查项配置。

使用方法

将规则集写在css文件的头部,工具检查文件时,以文件内的规则集为准。

使用样例

/*csslint empty-rules: false, important: true*/
.button {}

在项目中应用csslint

参照文档,把csslint工具集成到打包脚本中,对项目的css文件进行检查,找到两类问题。老实说,即便是参照报告来查找错误,想要搞清楚问题,仍然不容易,比如:

  • 双引号问题。

      #wrapper {
          display: block;
          margin: 0 auto;
          text-align: left;
          min-width": 720px;   看到这行代码的问题了吗?
          max-width: 1000px;
      }
    
  • 单位问题。文章来源地址https://www.toymoban.com/news/detail-764809.html

      .wrapper {
          display: block;
          margin: 0 auto;
          text-align: left;
          max-width: 1000x;   看到这行代码的问题了吗?
      }
    

到了这里,关于CSS语法检查利器之csslint的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python基础语法:数据分析利器

    ⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者: 秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们 点赞👍🏻、收藏

    2024年02月09日
    浏览(47)
  • 论文撰写新利器:AI工具大集合,助你高效完成学术创作

    在学术研究的道路上,撰写论文无疑是一项既费时又费力的任务。幸运的是,随着人工智能技术的飞速发展,现在有了一系列AI工具,它们能够帮助我们高效地完成论文撰写工作。以下是几款你可能会发现非常有用的AI论文辅助工具。 网址:学薯达 学薯达是一个提供快速论文

    2024年04月09日
    浏览(53)
  • 操作无法完成错误0x0000709再次检查打印机名称解决方法!

    白雨青工作站发文地址:操作无法完成错误0x0000709再次检查打印机名称解决方法!-白雨青工作站   windows操作系统在连接共享打印机时会出现“操作无法完成错误0x0000709再次检查打印机名称……”,资源管理器输入\\\\IP,访问没有问题,但是双击打印机添加的时候就会出现这个

    2024年02月11日
    浏览(44)
  • 超详细-Vivado配置Sublime+Sublime实现VHDL语法实时检查

    目录 一、前言 二、准备工作 三、Vivado配置Sublime 3.1 Vivado配置Sublime 3.2 环境变量添加 3.3 环境变量验证 3.4 Vivado设置 3.5 配置验证 3.6 解决Vivado配置失败问题 四、Sublime配置 4.1 Sublime安装Package Control 4.2 Sublime安装VHDL插件 4.3 语法检查工具插件SublimeLinter-contrib-xvhdl 4.4 结果验证

    2024年02月10日
    浏览(90)
  • VScode中使用python突然没有代码提示和语法检查,程序运行正常

    在使用vscode编写python程序时,突然没有代码提示,大概率是由于Pylance扩展模块引起的,可以先尝试重启它,不行的话,在安装其他版本,如下: 先禁用,再打开,然后重启vscode,一般就可以解决,不行的话,再切换其他版本。

    2024年02月03日
    浏览(56)
  • Docker安装nacos单机版,配置发布时报错:发布失败,请检查参数是否正确

    今天想模拟一下开发环境nacos路由发布时出现删除某一个路由配置会导致gateway不可用,由于开发环境一直在使用,为此自己使用docker搭建一下nacos想复现一下场景。 根据相关博客搭建完成后,自己新建配置时,点击发布,就报了错误\\\"发布失败,请检查参数是否正确\\\"。 “发布

    2024年02月09日
    浏览(52)
  • Nacos新建配置报错:发布失败。请检查参数是否正确

    本文总结了nacos集群配置出现这个问题的几个解决办法。 第一步应该是看nacos日志,而不是其他。 由于前端配置返回失败,可以直接在logs目录下查看fatal级别日志: 如下 很明显,失败原因是字段gmt_create没有默认值,该字段建表时类型为datetime类型,在mysql中没有默认值,设置

    2024年02月11日
    浏览(55)
  • 多项创新技术加持,实现零COGS的Microsoft Editor语法检查器

    编者按:Microsoft Editor 是一款人工智能写作辅助工具,其中的语法检查器(grammar checker)功能不仅可以帮助不同水平、领域的用户在写作过程中检查语法错误,还可以对错误进行解释并给出正确的修改建议。神经语法检查器模型是这款提供了强大拼写检查和语法纠正服务的

    2024年02月08日
    浏览(54)
  • Redis的发布订阅模式:实现消息队列和实时数据推送的利器

    当涉及到实时数据推送和消息队列时,Redis的发布订阅模式是一种非常有用的工具。Redis是一个开源的内存数据库,被广泛用于缓存、队列和实时数据处理等方面。 在本博客中,我们将重点介绍Redis的发布订阅模式,并且提供一些示例代码来帮助读者更好地理解这个模式以及如

    2024年02月12日
    浏览(92)
  • Vivado时序约束TCL命令——获取引脚(get_pins)在FPGA设计中起着重要作用。本文将为大家详细介绍get_pins命令的语法和使用方法。

    Vivado时序约束TCL命令——获取引脚(get_pins)在FPGA设计中起着重要作用。本文将为大家详细介绍get_pins命令的语法和使用方法。 get_pins命令用于获取指定对象(Object)的引脚(Pin)列表。我们可以使用get_pins来获取具有特定命名约定的引脚(如CLOCK、RESET等),并通过对这些引

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包