我们都知道HTML和CSS不是编程语言,而是标记语言,所以很难像JS那样定义变量、编写方法、实现模块化开发等。 在目前的CSS编写模式中,我们定义了一些常用的样式类名,哪一块HTML需要这个样式,并添加相应的样式类名,所以我们经常会看到一个标签上有很多样式类名,在这种模式下我们必须时刻注意CSS的优先级,避免重叠的样式覆盖。
为了解决CSS的这个困境,CSS预处理和预编译的思想脱颖而出,比较有代表性的有less、sass和stylus。 他们在传统的CSS中增加了大量的新的语法、写作方法、常用函数等,可以使我们的CSS成为像JS一样的编程语言。 本文重点介绍 less 的语法和用法。
写出的少**不能直接在浏览器中运行,需要编译成普通的css**,所以先来学习习常见的少编译方法。
Less 仅适用于现代浏览器(最新版本的 Chrome、Firefox、Safari 和 IE)。 我们不建议在生产中使用 LESS 客户端,因为用户在将 LESS 编译为 CSS 时会看到加载延迟,即使浏览器中的加载延迟不到一秒。
让我们首先介绍我们设置样式的 less 文件注意:rel='stylesheet/less'
然后少介绍JS 文件。
在浏览器中调用有一个好处:可以开启监控模式,只要我们改动少,在一定时间内,浏览器就会重新编译,我们可以看到想要的效果。方法如下:
需要注意的是,浏览器端是用来拉取ajax的。 较少的文件,因此当直接在本地文件系统上打开时(即地址以 file: 开头)或存在跨域时,它们不能直接拉取。 文件较少,导致样式无法生效。因此,一般使用less来做CSS预处理,很少采用引用less的方式,一般将less编译成css,然后引用生成的CSS文件。
// index.HTML 文件 Hello World!
// styles.减少文件@blue:5b83ad;@size:50px;header
如果直接导入较少的文件,则会出现错误,这可以通过尝试从简单的 Web 服务器**(例如 lite-server)开始来解决
npm install -g lite-serverlite-server //to run
这个方法是目前项目中最常用的方式,适用于项目的生产环境,就是将我们的LESS文件编译成一个CSS文件,我们可以直接在项目中导入CSS文件基本步骤:安装>编译、压缩编译>或使用节点**实现批量编译等
将 less 模块安装到全局节点环境中。
npm install less -g
使用命令进行编译。
->看跌期权样式更少的文件编译成样式CSS 文件(如果您没有此 CSS 文件,您将自行创建) LESSC 样式less styles.CSS ->编译的CSS文件是压缩的Lessc Stylesless styles.min.css -x 或 --compress
节点命令编译前后的对比:
// styles.更少文件(预编译) @blue: 5b83ad;@size:50px;header
// styles.CSS 文件(编译后)标头
当我们使用上面的 node 命令进行编译时,我们一次只能编译一个文件,这样如果页面中少了多个文件,每次编译都比较耗时,所以我们可以结合 node 的 fs 文件读写操作编写一组批量编译的 **。
-> 定义编译文件目录和目标导出目录 var dirpath ="./less/", tarpath = "./css/";->导入导入节点中需要用到的模块 var fs = require()"fs"), less = require("less");->读取 dirpath 中的所有文件,检查文件类型,只检查我们存储的文件更少 var ary = files = fsreaddirsync(dirpath); files.foreach(function (file, index) ) ) ->编译目录下的所有文件,并将编译后的结果保存在指定目录下 aryforeach(function (file) ,function (error, output) )
目前常用的编译工具有:考拉(据说是目前最流行的)、*编译( )等。 我不会在本文中详细介绍。 LESS的基本语法基本分为以下几个方面:变量、mixins、嵌套规则、操作、函数、作用域等。
与 JS 中的变量一样,较少的变量定义使用 @ 而不是 var
//->less **link-color: #428bca; @link-color-hover: darken(@link-color, 10%);a } ->编译成css的结果 a a:hover
除了如上所述使用变量存储公共属性值外,我们还可以使用变量来存储公共 URL、选择器等。
//->less **#000; background: url("@/test.png"); selector: box; @bgimg: "../img"; @property: color;
基本混合:您可以轻松地将定义的类 A 引入到另一个类 B 中,从而使类 B 轻松继承类 A 中的所有属性。 我们也可以使用参数进行调用,就像使用函数一样。
->less **public n** ul ->编译为 css 的结果public n** ul
上面的 **,n** ul 是将 public 中设置的 style 属性值复制到自己的样式中。 如果不想在编译后的结果中以 public 的样式输出结果,只需要按如下方式编写即可:
->less **public() n** ul ->编译为 css n** ul 的结果
extend虽然在上面的例子中,n** ul 继承了 public 的样式,但原理是将 ** 复制过来,这样在编译好的 CSS 中仍然会有很多冗余的 CSS**为了避免这种情况,我们可以使用 extend 伪类来实现样式的继承。 与原始选择器共享一组样式,但请确保原始选择器不是括号。
->less **public n** ul ->编译为 css 的结果public, n** ul n** ul
我们可以通过在选择器中嵌套另一个选择器来实现继承,这大大减少了数量并使其看起来更清晰。
//->less **#header .logo }
->编译为 css header header 的结果n**igation #header .logo #header .logo:hover
运算提供加法、减法、乘法和除法运算;我们可以做属性值和颜色的操作,这样我们就可以实现属性值之间的复杂关系。 如果要操作属性值,则 less 中的函数将逐一反映** j**ascript**。
可以涉及任何数字、颜色或变量。 让我们看一组示例:
@base: 5%;@filler: @base * 2;@other: @base + filler;color: #888 / 4;background-color: @base-color + #111;height: 100% / 2 + filler;
Less 提供一系列颜色算术函数。 颜色首先转换为 HSL 颜色空间,然后在通道级别进行操作:
lighten(@color, 10%);// return a color which is 10% *lighter* than @colordarken(@color, 10%);// return a color which is 10% *darker* than @color
Less 提供了一组方便的数学函数,可用于处理某些数值类型的值:
round(1.67); // returns `2`ceil(2.4); // returns `3`floor(2.6); // returns `2`
less 的作用域与其他编程语言非常相似,它首先在本地查找变量或混合模块,如果没有,则在父作用域中查找,直到找到它。
@var: red;#page }#footer
少习学习:少理解少编译少学习习:少的基本语法 一种动态样式的语言。