浏览器端Less

摘要:

  之前项目用过Less,现在负责的项目也要使用,所以就总结下Less,也方便以后查看。本文主要是讲浏览器端如何使用Less。

简介:

  LESS是一种由Alexis Sellier设计的动态层叠样式表语言。LESS 是开源的,其第一个版本由Ruby写成,但在后续的版本当中,Ruby逐渐被替换为JavaScript。受益于JavaScript,LESS可以在客户端上运行(IE6+、Webkit、Firefox),也可以在服务端运行(Node.js、Rhino)。

本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。你也可以再less文件中写按照css规则写样式。

意义:

改变传统样式的编写方式,以面向对象的方式编写,提高开发效率。

引入LESS:  

  首先,引入rel属性的值是stylesheet/less.less样式表。如下:

<link rel="stylesheet/less" type="text/css" href="styles.less" />

在渲染HTML页面时,less文件需要编译成css文件。我们可以有很多种方法。在服务器端,如Node.js,我们有专门的less编译模块。如果是在客户端,需要从LESS官网下载less.js文件,然后在HTML页面中引入,如下:

<script src="less.js" type="text/javascript"></script>

有了less编译工具,我们就可以渲染页面了。

  在浏览器中使用less.js开发是很好的,但不推荐用于生产环境中。浏览器端使用是在使用LESS开发时最直观的一种方式。如果是在生产环境中,尤其是对性能要求比较高的场合,建议使用node或者其它第三方工具先编译成CSS再上线使用。

注意:

  • 确保包涵.less样式表在less.js脚本之前
  • 当你引入多个.less样式表时,它们都是独立编译的。所以,在每个文件中定义的变量、混合、命名空间都不会被其它的文件共享。
  • 必须通过服务器环境访问页面,否则报错

浏览器选项:

  你可以引入<script src="less.js"></script>之前通过创建一个全局less对象的方式来指定参数,例如:

<!-- set options before less.js script -->
    <script>
      less = {
          env: "development",
          logLevel: 2,
          async: false,
          fileAsync: false,
          poll: 1000,
          functions: {},
          dumpLineNumbers: "comments",
          relativeUrls: false,
          globalVars: {
            var1: ‘"string value"‘,
            var2: ‘regular value‘
          },
          rootpath: ":/a.com/"
        };
    </script>
    <script src="less.js"></script>

但是这影响所有初始链接标记。你也可以在指定的脚本标签的增加选项,如下:

<script src="less.js" data-env="development"></script>

或者,你也可以在链接配置参数覆盖某些选项,如下:

<link data-dump-line-numbers="all" data-global-vars=‘{ myvar: "#ddffee", mystr: "\"quoted\"" }‘ rel="stylesheet/less" type="text/css" href="less/styles.less">

注意:

  • 以上三种配置参数的优先级为:link标签的>script标签>全局对象
  • 对象属性名称不驼峰
  • link标签的配置只和时间选项有关,其他不起作用

观察模式:

  如果使用观察模式,则配置参数的env为development。然后在Less.js文件加载之后调用less.watch(),如下:

<script>less = { env: ‘development‘};</script>
<script src="less.js"></script>
<script>less.watch();</script>

 注意:

  如果启动了观察模式,则浏览器会不断请求less文件,根据Last-Modified参数判断是否重新渲染页面,这会造成很大的性能消耗,所以在线上不要开启观察模式。如果是开发环境,这方便了我们观察效果。你也可以在href后面加上‘#!watch‘来触发观察模式。

完整demo:

  reset.less是重置浏览器默认样式,config.js是浏览器选项的配置参数,如下:

config.js

less = {
    env: "development", // or "production"
    async: false,       // load imports async
    fileAsync: false,   // load imports async when in a page under
    // a file protocol
    poll: 1000,         // when in watch mode, time in ms between polls
    functions: {},      // user functions, keyed by name
    dumpLineNumbers: "all", // "comment" or "mediaQuery" or "all"
    relativeUrls: false,// whether to adjust url‘s to be relative
    // if false, url‘s are already relative to the
    // entry less file
    rootpath: ":/"// a path to add on to the start of every url
    //resource
};

index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <link rel="stylesheet/less" type="text/css" href="./less/reset.less" />
    <link rel="stylesheet/less" type="text/css" href="./less/styles.less" />
    <script src="./js/config.js"></script>
    <script src="./js/less-1.3.3.min.js"></script>
    <script>less.watch();</script>
</head>
<body>

</body>
</html>

参数详解:

async

Type: Boolean
Default: false
是否异步加载重要文件
dumpLineNumbers

Type: String
Options: ‘‘| ‘comments‘|‘mediaquery‘|‘all‘
Default: ‘‘
如果设置了,这增加了源代码行信息输出的CSS文件。这有助于您调试,分析其中一个特定的规则是从哪里来的。
comments 选项用于输出user-understandable内容,
mediaquery 选项用于使用火狐插件解析css文件信息.
env

Type: String
Options: development or production
Default: depends on page URL
运行环境,如果是production,你的css文件将被缓存到本地并且信息不会输出到控制台。如果url以file://开头或者在你本地或者没有标准的端口,这都将被认为是development模式。
例如:
less = { env: ‘production‘ };
errorReporting

Type: String
Options: html|console|function
Default: html
设置编译失败时错误报告的方法。
fileAsync

Type: Boolean
Default: false
当以file协议访问页面,是否异步引入文件
functions

Type: object
用户自定义函数
e.g.
less = {
functions: {
myfunc: function() {
return new(less.tree.Dimension)(1);
}
}
};
可以像Less函数一样使用它。
.my-class {
border-width: unit(myfunc(), px);
}
logLevel

Type: Number
Default: 2
在控制台输出日志的数量。如果是production环境,将不会输出任何信息。
2 - Information and errors1 - Errors0 - Nothing
poll

Type: Integer
Default: 1000
在观察模式下,测试的时间。
relativeUrls

Type: Boolean
Default: false
使用相对路劲。如果设置FALSE,则url是相对根目录文件。
globalVars

Type: Object
Default: undefined
全局变量列表注入代码。“字符串”类型的变量必须显式地包含引号。
less.globalVars = { myvar: "#ddffee", mystr: "\"quoted\"" };
这个选项定义了一个可以被文件引用的变量。这个变量也可以在文件中重新定义。
modifyVars

Type: Object
Default: undefined
Same format as globalVars.
与 globalVars参数含义相反,它将会在你文件最后定义,这意味着它将重写你在文件定义的。
rootpath

Type: String
Default: false
设置根目录,所有的Less文件都会以这个目录开始。
useFileCache

Type: Boolean
Default: true (previously false in before v2)
是否要使用每个会话文件缓存。缓存文件可以使用modifyVars,并且它不会再次检索所有文件。如果您使用观察模式或调用刷新加载设置为true,那么运行之前缓存将被清除。

时间: 2024-12-27 16:01:27

浏览器端Less的相关文章

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

asp.net获取浏览器端操作系统名称

/// <summary>/// 获取浏览器端操作系统名称/// </summary>/// <returns></returns>public static string GetOSName(){    string osVersion = System.Web.HttpContext.Current.Request.Browser.Platform;    string userAgent = System.Web.HttpContext.Current

浏览器端对服务器端返回的日期的处理方式

用javascript的 Date 函数来处理:     var date=jQuery.parseJSON(data)将返回的数据解析成为jQuery对象.     var start = new Date(date);     var year = start.getFullYear();     var month = start.getMonth();     var day = start.getDate(); 浏览器端对服务器端返回的日期的处理方式,布布扣,bubuko.com

在浏览器端用JS创建和下载文件

前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等). 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打开->另存为.如下面这个链接: <a href="file.js">file.js</a> 用户点击这个链接的时候,浏览器会打开并显示链接指向的文件内容,显然,这并没有实现我们的需求. HTML5中给a标签增加了一个download属性,只要有这个属性,点击这

浏览器端的javascript加载器

commonJS,定义了一种同步加载脚本的规范.对于浏览器端而言,因为js脚本都是在远端,用同步的方式可能会长时间阻塞线程.因此,浏览器端的js加载器并不会严格按照commonJS来做.seajs作为一个试图遵循commonJS规范的加载器,是在规范的基础上在外面包一层define,来异步加载js,以下是seajs官网的一个例子: // 所有模块都通过 define 来定义 define(function(require, exports, module) { // 通过 require 引入依

asp.net 行删除原理(浏览器端请求,服务器端响应)

1.asp.net中数据绑定控件中行按钮和行超链接实现方式不同:ListView中Button,HyperLink两种行删除方式,按钮方式是将行的id通过表单提交到服务器:行超链接的方式是通过超链接的url通过get的方式提交给处理页面,超链接的方式由于没有提交所有的表单信息,因此很多服务端控件的高级用法用不了. 2.超链接的因为没有向服务器提交ViewState等隐藏字段,所以处理时IspostBack是false:而按钮提交的表单,所以ispostback是true.可以在超链接的href中

客户端(浏览器端)数据存储技术概览

客户端(浏览器端)存储数据有诸多益处,最主要的一点是能快速访问(网页)数据.目前常见的浏览器端数据存储方法有:Cookies,Local Storage,Session Storage,IndexedDB. Cookies Cookies 是一种在文档内存储字符串数据最典型的方式.一般而言,cookies 会由服务端发送给客户端,客户端存储下来,然后在随后让请求中再发回给服务端.这可以用于诸如管理用户会话,追踪用户信息等事情. 此外,客户端也用使用 cookies 存储数据.因而,cookies

Vue服务端渲染和Vue浏览器端渲染的性能对比

Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司做Vue项目的时候,一直苦于产品.客户对首屏加载要求,SEO的诉求,也想过很多解决方案,本次也是针对浏览器渲染不足之处,采用了服务端渲染,并且做了两个一样的Demo作为比较,更能直观的对比Vue前后端的渲染. talk is cheap,show us the code!话不多说,我们分别来看两个D

css3让浏览器端可以显示用户电脑里没有安装的字体

@font-face @font-face能够加载服务器端的字体文件,让浏览器端可以显示用户电脑里没有安装的字体. 语法: 1 @font-face { 2 font-family : 字体名称; 3 src : 字体文件在服务器上的相对或绝对路径; 4 } 这样设置之后,就可以像使用普通字体一样在(font-family)中设置字体样式. 1 p { 2 font-size :12px; 3 font-family : 字体名称;/*要跟@font-face中设置的字体一致*/ 4 }

解除百度云浏览器端对下载大文件的限制

百度网盘对浏览器端下载大文件做了一些限制,当超过一定大小的文件必须使用百度云管家才可以下载,这给用户的使用带来了不便. [不看分析请直接拉到页底] 1. 百度网盘限速原理 当点击下载一个大文件的时候百度网盘会弹出这样一个提示框. 我们给下个断点,看看是什么代码创建了这个提示框. 然后再次点击下载一个大文件,我们发现断点已经断下来了. 可以看出这里是在把提示对话框显示出来,我们需要查看调用栈往上找找. 跳过一些jQuery的操作,我们看到了这样一个函数,继续往上找. 这个isPlatformWin