热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【译】利用.LESS来提高CSS

简介CascadingStyleSheets,或简称为CSS,是用于描述Web页面外观的语言。利用CSS,Web开发人员可以将文档的内容(html,文本,或者图片等等)和页面的表现相

简介

     Cascading Style Sheets,或简称为CSS,是用于描述Web页面外观的语言。利用CSS,Web开发人员可以将文档的内容(html,文本,或者图片等等)和页面的表现相分离.这种分离会让页面更加容易阅读,理解和更新。浏览器通过将CSS文件进行缓存使页面所占用的宽带大幅减少。CSS还可以使网站的改版更加容易。能展示CSS无与伦比灵活性的例子是CSS 禅意花园。这个网站只有一个固定HTML的页面,但是允许全世界的开发人员提交他们自己的CSS页面来让网站变得与众不同。

  

     不幸的是,现有的CSS语法还有待提高,因为CSS中没有变量一说,许多css文件包含大量重复的css规则,这使得CSS文件不仅比应有的要大,还使阅读更加困难。如果一个网站仅仅是将主色调改了,则所有的CSS修饰符都需要被重复的修改。并且CSS特有的继承性也会导致问题,比如让

中的元素具有下划线,但h1内的元素没有下划线,则还需要多定义一个选择符,比如h1 a.在理想情况下CSS应该支持嵌套定义,让你可以在H1选择符内直接定义a.

 

     .LESS是一个免费开源的,从Ruby的LESS library衍生而来。.LESS是一个允许web开发人员使用更加先进的语言特性的语法解析器,这些特性包括变量,操作符,嵌套规则。其实.LESS真正的作用是将使用高级特性的CSS转换成标准的CSS.这些都是在Web客户端发起请求时通过Http Handler来完成的。也可以是编辑时就完成的。此外,.less可以配置成自动最小化所生成的CSS文件,不仅节省了带宽,并且使最终用户体验更上一层。

 

     这篇文章讲述如果在你的Asp.net网站中开始使用.LESS。请继续往下读。

 

解决CSS的不足:变量

     CSS的一个缺陷是css文件中经常包含N多重复的CSS规则。比如说,很多网站都在不同的CSS规则中使用相同的颜色信息,页面的背景色和页面头部背景色或者页脚背景色或许都使用了相同颜色。下面的CSS代码段说明了当应用上面规则时,CSS文件存在着重复:

#header {
   background-color: #ffe;
}

#footer {
   background-color: #ffe;
}

a:hover {
   background-color: #ffe;
} 

   如果网站需要将主色调改变,则需要改变所有使用#ffe颜色的地方。

   .LESS引入了变量来解决这样的问题。就像C#和VB带啊一样。变量允许通过变量名来引用相应的值,如果你需要改变值,比如说上面的#ffe,你仅仅只是需要改变变量值皆可。下面代码是使用这一特性的CSS:

@primary_color: #ffe;

#header {
   background-color: @primary_color;
}

#footer {
   background-color: @primary_color;
}

a:hover {
   background-color: @primary_color;
} 

解决CSS的不足:对变量使用操作符

 

   .LESS甚至可以对变量应用操作符,比如你需要将页面头部的边框颜色比背景颜色略微深一点,你可以这样使用:

@primary_color: #ffe;

#header {
   background-color: @primary_color;
   border-bottom-color: @primary_color - #222;
}

   当.LESS的分析器遇到上面操作符时,它会将@primary_color的值减去十六进制的值#222,结果会是颜色#ddc。

解决CSS的不足:混合器

     使用多个CSS class来包含经常使用的css规则的一小部分并不是少见的。.LESS支持混合器,它允许在一个class中定义一部分规则并在其他的class中包含这部分规则。这很像变量,只是这是应用在class上的。看下面的CSS代码段,注意body和#submenu有两个相同的属性,他们的margin和padding属性都设置成0.

body {
   font-family: Verdana;
   padding: 0;
   margin: 0;
}

#submenu {
   background-color: #ffe;
   padding: 0;
   margin: 0;
} 

     而使用混合气,你可以将重复定义的属性移到一个单独的class呢(我命名为noMarginNoPadding)然后在body和#submenu直接饮用这个class:

.noMarginNoPadding {    padding: 0;
   margin: 0;
}

body {
   font-family: Verdana;
   .noMarginNoPadding
}

#submenu {
   background-color: #ffe;
   .noMarginNoPadding
} 

   

解决CSS的不足:嵌套规则

  很多情况下,样式表对于一个大块内的内容需要定义很多选择符,比如,一个web设计人员需要为页面头部所有h1元素定义规则,或者是为所有ul内的li元素使用特定的class名称,如果需要实现这些,CSS需要制定很多的选择符,需要写一大堆的选择符并用空格分开。

   .LESS使用一种更加直观的方式,下面CSS代码段是web设计人员常见的任务,为ol内的li元素指定横向排列。这种样式需要为ul定义规则,为ul内的li定义规则还需要为li内的a(超链接)之类的元素定义规则,.LESS允许使用嵌套定义来让CSS更加容易阅读和理解。并且使其分组。

ul
{
   list-style-type: none;
   height: 30px;
   
   li
   {
      float: left;
      padding-right: 15px;
      
      a
      {
         padding: 5px;
         display: block;
         color: black;
         text-decoration: none;
      }
      
      a:hover
      {
         background-color: @menu_color - #222;
      }
   }
} 

使用.LESS的HTTP Handler解析CSS

     上面.LESS支持的多种特性--变量,操作符,混合器,嵌套规则,并不是标准CSS所能够识别的。如果你创建一个样式表并使用变量,然后发送到客户端,服务端并不会理解变量,也就不会进行处理。而.LESS的作用是将其支持特性的CSS处理成合法有效的CSS。将.LESS的CSS转换成标准的CSS是在客户端向服务端发起请求时进行的。让我们来看.LESS是如果凭空生成CSS的。

     为了你的站点可以使用.LESS,你需要dotless.Core.dll集合到你的bin目录下,写这篇文章时你可以下载到目前最新的.LESS(版本1.0.0.5),如果想要更新的版本,请去.LESS website.

      下一步,打开Web.config来注册.LESS的HTTP Handler.至少要添加如下节点到下(如果站点是跑在IIS7integrated pipeline模式下,则还需要添加到\节点

<httpHandlers>
   ...

   <add type="dotless.Core.LessCssHttpHandler, dotless.Core" validate="false" path="*.LESS" verb="*" /> httpHandlers>  

    上面的代码告诉ASP.net将所有以.LESS扩展名结尾的文件都交由LessCssHttpHandler这个HTTP Handler来处理,这个HTTP Handler将CSS解析成标准的CSS并放入一个特定的文件中,然后返回给请求者。

    这就是所有内容了!不过要记住将你所有的css文件都改成.LESS作为扩展名。现在你可以享受.LESS所带来的好处了。

     可以在文章底部找到下载使用.LESS的ASP.net示例站点的链接。如果想查看生成后的CSS代码,请看如下DEMO中的Styles.less的代码段:

@base_color: #f63;

.noMarginNoPadding {
   margin: 0;
   padding: 0;
}

body {
   background-color: @base_color;
   .noMarginNoPadding;
} 

   上面代码展示了使用变量(@base_color)和混合器(noMarginNoPadding类),styles.less文件通过中的 节点进行引用,就像你引用普通的css文件一样。当浏览器请求文件时,.LESS HTTP Handler会将上面的CSS代码段转换成下面的代码段,并返回到浏览器,注意@base_color的值是如何被替换的,以及noMarinNoPadding类是如何应用到body选择符中:

.noMarginNoPadding {
   margin: 0;
   padding: 0;
}
body {
   background-color: #f63;
   margin: 0;
   padding: 0;
} 

 

缓存和压缩

     你可以通过在web.config中配置.LESS以支持缓存和压缩(详细请看.LESS homepage或者在本篇文章底部的示例代码。)cache选项通过将HTTP Handler生成的标准CSS通过ASP.net中的Cache对象缓存在服务端,而压缩CSS时用过删除空格以及其他不需要的标签来减少CSS的大小,比如,前面的CSS代码开启压缩后如下:

.noMarginNoPadding{margin:0;padding:0;}body{background-color:#f63;margin:0;padding:0;}  

   记住,这里的缓存是将CSS缓存到服务器中。无论是否使用服务端缓存,.LESS HTTP Handler会含有将生成的CSS文件缓存在浏览器5分钟的HTTP头。

 

使用.LESS的编译器手动生成标准CSS文件

      连同HTTP Handler一起,.LESS的下载文件中海包含了.LESS引擎的扩展,名为:dotless.Compiler.exe,这个程序用于在命令行下将.LESS CSS生成标准的CSS文件,带有压缩CSS选项,比如,生成开启压缩选项后,将Styles.less生成Styles.css可以使用如下命令:

dotless.Compiler.exe -m Styles.less Styles.css 

    使用.LESS编译器的好处是生成静态的css文件,你既不用依靠.Less的客户端也不用依靠.LESS的服务端缓存。此外,你也不需要为此设置Web.config或者是IIS,你只需要处理标准的css文件即可。当然,剑是双刃的,你需要手动来生成CSS文件,然而,如果你有自动生成或者是部署的程序,你仅仅只需要添加几行命令而已。

 

总结

   CSS是一种理想设置WEB页面的方式,虽然CSS非常强大,但是它本身固有的缺陷也会使样式文件由于重复而过于庞大。.LESS通过引入一些列特性来解决CSS的不足,这些特性包括:变量,操作符,混合器,嵌套规则。这些.LESS的特性既可以通过HTTP Handler来处理,也可以通过命令行来编译。此外,.LESS还可以通过配置来自动压缩生成CSS的大小。

 

Happy Programming!

  • By Scott Mitchell

     

    translated by CareySon


  • 推荐阅读
    • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
    • Nginx使用AWStats日志分析的步骤及注意事项
      本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
    • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
    • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
    • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
    • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
    • ASP.NET2.0数据教程之十四:使用FormView的模板
      本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
    • web.py开发web 第八章 Formalchemy 服务端验证方法
      本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
    • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
    • 解决github访问慢的问题的方法集锦
      本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
    • HTML5网页模板怎么加百度统计?
      本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
    • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
      本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
    • 深入解析Linux下的I/O多路转接epoll技术
      本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
    • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
    • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
    author-avatar
    Sophie-wyq_661
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有