Less学习笔记 -- Mixins(混合)一

混合:

混合可以将一个定义好的classA轻松的引入到另一个classB中,从而简单实现classB继承classA中的所有属性。任何CSS中的class或者id都可以引入

Less:

.aWidth{width:400px;}
#aHeight{height:600px;}
p{
  .aWidth;
  #aHeight;
}

CSS:

.aWidth {
  width: 400px;
}
#aHeight {
  height: 600px;
}
p {
  width: 400px;
  height: 600px;
}

带选择器的混合集:

混合集不仅可以包含各种属性,而且可以包含各种选择器

Less:

.my-hover-mixin(){//加个空括号,不执行这段代码的编译
  &:hover{
    border:1px solid #ddd;
  }
}
button{
  .my-hover-mixin;
}

CSS:

button:hover {
  border: 1px solid #ddd;
}

不输出混合集:

如果你想创建一个混合集,但是却不想让它输出到你的样式中,你可以在混合集的名字后面加一个括号。这句话怎么理解呢?对比以下两段代码:

代码一:

Less:

.my-mixin{
  color:black;
}
/*看这里*/
.my-other-mixin{
  background:white;
}
.class{
  .my-mixin;
  /*看这里*/
  .my-other-mixin;
}

CSS:

.my-mixin {
  color: black;
}
/*看这里*/
.my-other-mixin {
  background: white;
}
.class {
  color: black;
  /*看这里*/
  background: white;
}

代码二:

Less:

.my-mixin{
  color:black;
}
/*看这里*/
.my-other-mixin(){
  background:white;
}
.class{
  .my-mixin;
  /*看这里*/
  .my-other-mixin;
}

CSS:带空括号的混合集并没有编译过来,但是可以编译到另一个引用它的选择器里面

.my-mixin {
  color: black;
}
/*看这里*/
.class {
  color: black;
  /*看这里*/
  background: white;
}

我们还可以带参数的调用,就像使用函数一样

Less:

.filter(@blur){
  -webkit-filter:blur(@blur);
  -moz-filter:blur(@blur);
  -ms-filter:blur(@blur);
  filter:blur(@blur);
}
.border-radius(@radius:5px){
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  border-radius: @radius;
}
#section{
  .border-radius;
  /*如果写公共样式的时候没有设定具体的数值,引用的时候就必须设定,否则出不来效果*/
  .filter(5px);
}
#footer{.border-radius(10px);}

CSS:

#section {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  /*如果写公共样式的时候没有设定具体的数值,引用的时候就必须设定,否则出不来效果*/
  -webkit-filter: blur(5px);
  -moz-filter: blur(5px);
  -ms-filter: blur(5px);
  filter: blur(5px);
}
#footer {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
}

带多个参数的混合

参数可以用逗号分号分隔,但是推荐用分号分隔。

定义多个具有相同名称和参数数量的mixins是合法的,less会使用它可以使用的属性。如果使用mixin的时候只带一个参数,比如.mixin(red),这个属性会导致所有的mixin都会强制使用这个明确的参数:

Less:

.mixin(@color) {
  color-1: @color;
}
.mixin(@color; @padding: 2px) {
  color-2: @color;
  padding-2: @padding;
}
.mixin(@color; @padding; @margin: 5px) {
  color-3: @color;
  padding-3: @padding;
  margin: @margin @margin @margin @margin;
}

h1{
  .mixin(red);
}
div{
  .mixin(green;4px);
}
span{
  .mixin(blue; 6px; 8px);
}

CSS:

h1 {
  color-1: #ff0000;
  color-2: #ff0000;
  padding-2: 2px;
}
div {
  color-2: #008000;
  padding-2: 4px;
  color-3: #008000;
  padding-3: 4px;
  margin: 5px 5px 5px 5px;
}
span {
  color-3: #0000ff;
  padding-3: 6px;
  margin: 8px 8px 8px 8px;
}

命名参数

引用mixin时可以通过参数名称而不是参数的位置来为mixin提供参数值,任何参数都通过它的名称来引用,而不是特定的顺序

Less:

.mixin(@color:blue; @padding:10px; @margin:15px;){
  color:@color;
  padding:@padding;
  margin:@margin;
}
.class1{
  .mixin(@margin:20px; @color:#e4393c;)
}
.class2{
  .mixin(#bf6da5; 60px;)
}

CSS:

.class1 {
  color: #e4393c;
  padding: 10px;
  margin: 20px;
}
.class2 {
  color: #bf6da5;
  padding: 60px;
  margin: 15px;
}

@arguments变量

arguments在Javascript中代表所有的参数,在这里也是同样的意思,只不过用法稍有区别。如果你不想单个单个的处理参数,这一特性是很有用的:

Less:

.box-shadow(@x:0; @y:0; @blur:1px; @color:#000;){
  -webkit-box-shadow: @arguments;
  -moz-box-shadow: @arguments;
  box-shadow: @arguments;
}
.big-block{
  .box-shadow(2px; 5px;)
}

CSS:

.big-block {
  -webkit-box-shadow: 2px 5px 1px #000000;
  -moz-box-shadow: 2px 5px 1px #000000;
  box-shadow: 2px 5px 1px #000000;
}

!important关键字

在调用的混合集后面追加!important关键字,可以使混合集里面所有的属性都继承!important

Less:

.foo(@bg:#f00, @color:#666){
  background:@bg;
  color:@color;
}
.unimportant{
  .foo;
}
.important{
  .foo !important;
}

CSS:

.unimportant {
  background: #ff0000;
  color: #666666;
}
.important {
  background: #ff0000 !important;
  color: #666666 !important;
}

在这里,也可以体验一把Less在实际开发中关于提高代码维护,给我们带来的魅力

示例一

Less:

@pink:#f0f;
#header{
  h2{
    font-size:26px;
    font-weight:bold;
  }
  .sub_title{
    color:@pink;
  }
  .study_list{
    color:@pink+111;
  }
  p{
    font-size:12px;
    a{
      text-decoration: none;
      &:hover{
        border-width:1px;
        color:@pink+666;
      }
    }
  }
}

CSS:

#header h2 {
  font-size: 26px;
  font-weight: bold;
}
#header .sub_title {
  color: #ff00ff;
}
#header .study_list {
  color: #ff6fff;
}
#header p {
  font-size: 12px;
}
#header p a {
  text-decoration: none;
}
#header p a:hover {
  border-width: 1px;
  color: #ffffff;
}

示例二

Less:

@url:"../images";
.filter(@blur){
  -webkit-filter:blur(@blur);
  -moz-filter:blur(@blur);
  -ms-filter:blur(@blur);
  filter:blur(@blur);
}
.border-radius(@radius:5px){
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  border-radius: @radius;
}

#loginForm{
  width:80%;
  margin:0 auto;
  ul{
    li{
      margin:15px 0;
      &:nth-child(2){
        position:relative;
      }
      label{
        color:#d4d2d2;
        font-family:‘Microsoft Yahei‘;
        font-weight:bold;
        font-size:1.1em;
      }
    }
  }
  .imgBground{
    width:100%;
    height:28vh;
    filter:url(blur.svg#blur);
    .filter(5px);
    .border-radius(10px);
    background:url(‘@{url}/1.jpg‘);
  }

CSS:

#loginForm {
  width: 80%;
  margin: 0 auto;
}
#loginForm ul li {
  margin: 15px 0;
}
#loginForm ul li:nth-child(2) {
  position: relative;
}
#loginForm ul li label {
  color: #d4d2d2;
  font-family: ‘Microsoft Yahei‘;
  font-weight: bold;
  font-size: 1.1em;
}
#loginForm .imgBground {
  width: 100%;
  height: 28vh;
  filter: url(blur.svg#blur);
  -webkit-filter: blur(5px);
  -moz-filter: blur(5px);
  -ms-filter: blur(5px);
  filter: blur(5px);
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  background: url(‘../images/1.jpg‘);
}

详情参考官方文档:

http://www.css88.com/doc/less/features/#mixins-feature

时间: 2024-08-09 14:41:14

Less学习笔记 -- Mixins(混合)一的相关文章

Less学习笔记 -- Mixins(混合)二

高级参数和@reset变量 如果你希望你的mixin接受数量不定的参数,你可以使用"...".在变量名后面使用它,它会将这些参数分配给变量 .mixin(...){/*接受0到N个参数*/} .mixin(){/*不接受任何参数*/} .mixin(@a:1){/*接受0到1个参数*/} .mixin(@a:1;...){/*接受0到N个参数*/} .mixin(@a;...){/*接受1到N个参数*/} .mixin(...){ } 接受0到N个参数 Less: .mixin1(..

【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理

[Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载

Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)

认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什么区别: 唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合. 混合树是Mecanim动画系统中比较复杂的一个内容,且其分为多个维度,

CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验证识别效果又当如何呢? 观察CAFFE_ROOT/examples/mnist/下的lenet_train_test.prototxt文件,发现里面既给出了训练集的路径,又给出了测试集的路径.因此答案很显然了,我们可以把自己的测试集做成leveldb(或lmdb)格式的,然后在lenet_train

Sass学习笔记(补充)

阅读目录 1. Sass和SCSS的区别 2. @while循环 3. @at-root 4. @content 5. 凸显注释 6. CSS输出样式 7. 重置浏览器样式 8. Sass调试和@debug命令.@warn命令 9. 使用Sass时的注意事项 相关链接:Sass学习笔记前篇 Sass关于颜色函数的乐趣 在Sass学习笔记前篇,记载了Sass安装.基本用法.编程语法,在这篇,将补充在前篇未记载的知识. 1. Sass和SCSS的区别 参考链接:http://sass.bootcss

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

PHP学习笔记

今天稍微整理一下学习笔记,每次都有整理在index.php中,今天我主要学习了PHP的命名规则,常量和变量以及变量的赋值,得给程序员提一个我发现,我发现每天写150行代码,哪怕是最简单的最入门级别的代码,也会有新发现.希望火星情报局可以通过这个提案也给我们带来点欢乐. PHP中常量和变量以及基础的赋值方法,都还是比较简单,有点js基础的人很容易上手,纯属记忆内容,作为一个初学者必须多加练习,锻炼自己的新语言逻辑处理能力和判断能力.见得多了反应才能迅速,每次学习整理成一份自我的学习教材,隔断时间回

Sass学习笔记

阅读目录 一. Sass安装 1.1 Ruby安装 1.2 运行gem命令 1.3 安装Sass 二. Sass基本用法 2.1 导入 2.2 注释 2.3 变量 2.4 嵌套 2.5 继承 2.6 占位符 2.7 混合宏 三. Sass编程 3.1 数学计算 3.2 条件 3.3 循环 3.4 函数 Sass被称为"CSS预处理器",就是用一种编程的思想去写CSS样式表.在还没接触Sass的时候,很多人都不愿意去了解,认为都会了CSS,为什么还要去写Sass,Sass最终生成的还是C

Sass学习笔记之入门篇

Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样式表.以下是我的学习笔记. Sass安装环境 1.安装sass(mac) ①:Ruby安装 ②:安装sass sudo gem install sass 可以通过 sass -v检测是否完成安装   2.更新sass gem update sass 3.卸载(删除)sass gem uninstal