Less

1. less是什么?有什么作用?如何使用less?其它CSS与编译器还有哪些?

  • less是一种动态层叠样式表语言,可以对css样式表进行预编译,使代码更简洁,逻辑更明晰,易维护;
  • 可以在客户端使用less,也可以在服务器端使用less,客户端直接引入less.js文件,并将写好的less文件用<link>标签引入,并启动本地服务器即可;另外在URL中加入#!watch可以监听less的变化;
  • 其他编译器:Sass/Scss、Stylus,postcss等;

2. 写出less常见的语法,如变量、嵌套、混合等写法范例

  • 变量
    变量允许我们单独定义一系列通用的样式,然后在需要的时候去调用:
    • style.less:
@color: orange;
@px_10: 100px;
body {
  background-color: @color;
}
.test {
  width: @px_10;
  height: @px_10;
  color: @color;
  background-color: cadetblue;
}
  • index.html:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet/less" type="text/css" href="styles.less">
  <script src="less.js"></script>
</head>
<body>
  <div class="test">test</div>
</body>
</html>
  • 效果:


  • 混合
    混合可以将一个定义好的class A轻松的引入到另一个class B中,从而简单实现class B继承class A中的所有属性。我们还可以带参数地调用,就像使用函数一样。
    • style.less
.rounded-corners (@raidus: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
}
.test {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}

可以用arguments简化:

.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
  box-shadow: @arguments;
  -moz-box-shadow: @arguments;
  -webkit-box-shadow: @arguments;
}
  • 嵌套
    我们可以在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。
    • style.less
@color1: orange;
@color2: green;
@parent_length: 100px;
@child_length: 50px;
.test {
  background: @color1;
  width: @parent_length;
  height: @parent_length;
  .child {
    background: @color2;
    width: @child_length;
    height: @child_length;
  }
}
  • index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet/less" type="text/css" href="styles.less">
  <script src="less.js"></script>
</head>
<body>
  <div class="test">
    <div class="child">
      child
    </div>
  </div>
</body>
</html>
  • 效果



    如果想写串联选择器,而不是写后代选择器,就可以用到&了. 这点对伪类尤其有用如 :hover 和 :focus

#header        { color: black;
  .navigation  { font-size: 12px }
  .logo        { width: 300px;
    &:hover    { text-decoration: none }
  }
}
  • 函数 & 运算
    运算提供了加,减,乘,除操作;我们可以做属性值和颜色的运算,这样就可以实现属性值之间的复杂关系。LESS中的函数一一映射了JavaScript代码,可以操作属性值。
    • style.less
@the-border: 1px;
@base-color: #333;
@red: #881122;
.test {
  width: 100px;
  height: 100px;
  border-top: @the-border solid @red;
  border-left: @the-border * 3 solid @base-color;
  border-right: @the-border + 5px solid @base-color + blue;
  background: @red + #4d5a23;
}
.child {
  width: 50px;
  height: 50px;
  background: desaturate(@red, 20%);
}
  • 效果


  • 模式匹配和导引表达式
    • 模式匹配:
.mixin (dark, @color) {
  color: darken(@color, 10%);
}
.mixin (light, @color) {
  color: lighten(@color, 10%);
}
.mixin (@_, @color) {
  display: block;
}

现在,如果运行:

@switch: light;
.class {
  .mixin(@switch, #888);
}

就会得到下列CSS:

.class {
  color: #a2a2a2;
  display: block;
}

原因是:
* 第一个混合定义并未被匹配,因为它只接受dark做为首参
* 第二个混合定义被成功匹配,因为它只接受light
* 第三个混合定义被成功匹配,因为它接受任意值

  • 引导
    当我们想根据表达式进行匹配,而非根据值和参数匹配时,导引就显得非常有用。
.mixin (@a) when (lightness(@a) >= 50%) {
  background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
  background-color: white;
}
.mixin (@a) {
  color: @a;
}

导引序列使用逗号‘,’分割,当且仅当所有条件都符合时,才会被视为匹配成功。

.mixin (@a) when (@a > 10), (@a < -10) { ... }
.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }
.mixin (@b) when not (@b > 0) { ... }

如果想基于值的类型进行匹配,我们就可以使用is*函式:

.mixin (@a, @b: 0) when (isnumber(@b)) { ... }

常见检测函数:
* iscolor
* isnumber
* isstring
* iskeyword
* isurl
* ispixel
* ispercentage
* isem

  • 字符串插值
@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");
  • 避免编译
    在字符串前加上'~'符号
.class {
  filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}

我们可以将要避免编译的值用 “”包含起来,输出结果为:

.class {
  filter: ms:alwaysHasItsOwnSyntax.For.Stuff();
}
  • JavaScript 表达式
    JavaScript 表达式也可以在.less 文件中使用. 可以通过反引号的方式使用:
@var: `"hello".toUpperCase() + '!'`;
@var: "HELLO!";
  • color函数 & Math函数

3. 什么是postcss? 有哪些工具

  • PostCSS 是一个使用 JS 插件来转换 CSS 的工具。这些插件可以支持使用变量,混入(mixin),转换未来的 CSS 语法,内联图片等操作。
  • PostCss是一个平台,为其插件提供一些API,其真正强大之处在于插件,可谓是“一把CSS开发的瑞士军刀”;
  • 比较著名的工具就是autoprefixer,添加属性前缀;cssnext未来语法;precss可以使用Sass函数等。

本文归本人和饥人谷所有,如需转载请注明来源,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何...
    zhangivon阅读 543评论 0 1
  • 变量 注意你的less样式文件一定要在引入less.js前先引入。 备注:请在服务器环境下使用!本地直接打开可能会...
    286f50208306阅读 1,015评论 0 1
  • 简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide...
    老夫的天阅读 1,892评论 1 29
  • 在过去的2016年,重新开始走上了自我学习之路。由最初阅读公众号上的文章,到看完了十几本书,短短的三四个月,养成了...
    吉日良辰阅读 186评论 0 1
  • 当今做父母的大都知道溺爱孩子有害,但却分不清什么是溺爱,更不了解自己家里有没有溺爱。 “溺”,词典上解释为“淹没”...
    铃铛儿童时尚阅读 338评论 0 0