三、mixin  混合

“mixin”属性只能基于现在已有的样式规则!你可以在mixin中使用类选择器和id选择器:

.a,#b{
color: rebeccapurple;
}
.mixin-class{
.a();
}
.mixin-id{
#b();
}

输出:

.a,
#b {
color: rebeccapurple;
}
.mixin-class {
color: rebeccapurple;
}
.mixin-id {
color: rebeccapurple;
}

注意,当调用mixin时,括号是可选的

.a()  //此种写法和下面写法无区别
.a;

3.1 不输出的 mixin

如果你想创建一个mixin,但你不想让mixin在生成css中输出,你可以在它后面加上括号 () 。

.my-mixin{
color: black;
}
.my-other-mixin(){
background: wheat;
}
.class{
.my-mixin;
.my-other-mixin;
}

输出:

.my-mixin {
color: black;
}
//此处并没有输出 .my-other-mixin
.class {
color: black;
background: wheat;
}

3.2 选择器在mixin的用法

mixin不仅可以包含属性,还可以包含选择器

.my-hover-mixin(){
&:hover{
border: 1px solid red;
}
}
button{
.my-hover-mixin();
}

输出:

button:hover {
border: 1px solid red;
}

3.3 命令空间  Namespaces

如果想要在一个更复杂的选择器中混合属性,可以堆叠多个id或类

#outer{
.inner{
color: red;
}
}
.c{
#outer>.inner;
}

同样,上面的 > 符号是可选的,

// 下面写法都一样
#outer > .inner;
#outer > .inner();
#outer.inner;
#outer.inner();

这种使用方法被称为命名空间。您可以将mixin置于id选择器之下,这样可以确保它不会和另一个库冲突。

#my-library {
.my-mixin() {
color: black;
}
}
// which can be used like this
.class {
#my-library > .my-mixin();
}

3.4 !important 关键字

在mixin后使用 !important 关键字,将会标记调用所有继承的属性为!important

.foo (@bg: #f5f5f5, @color: #900) {
background: @bg;
color: @color;
}
.unimportant {
.foo(1);
}
.important {
.foo(2) !important;
}

输出:

.unimportant {
background: #f5f5f5;
color: #900;
}
.important {
background: #f5f5f5 !important;
color: #900 !important;
}
四、带参数的Mixin

如何将参数传递给mixin?

mixin还可以接受参数,这些参数在混合时传递给选择器块。举例:

.border-radius(@radius) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}

下面是我们如何将其混合到各种规则中:

#header {
.border-radius(4px);
}
.button {
.border-radius(6px);
}

参数mixin还可以为其参数设置默认值

.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}

我们现在可以这样来调用:

#header {
.border-radius;
}

你也可以使用不带参数的参数混合。如果您希望从CSS输出中隐藏规则集,但希望将其属性包含在其他规则集中,则这非常有用:

.wrap() {
text-wrap: wrap;
white-space: -moz-pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
} pre { .wrap }

输出如下:此案例同 上方 3.1

pre {
text-wrap: wrap;
white-space: -moz-pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}

4.1 mixin中包含多个参数 - Mixins With Multiple Parameters

参数是 分号逗号 分割的。

建议使用分号。因为逗号有双重含义:它既可以被解释为mixin参数的分隔符,也可以作为css列表分隔符,容易混淆。

如果使用逗号作为mixin分隔符,那么就不可能创建使用逗号分隔的列表作为参数。另一方面,如果编译器在mixin调用或声明中看到至少一个分号,那么它假设参数由分号分隔,所有逗号都属于css列表:

  • 两个参数和每个包含逗号分隔的列表: .name(1, 2, 3; something, else)
  • 三个参数,每个参数包含一个数字:.name(1, 2, 3)
  • 使用假分号来创建一个包含逗号分隔的css列表的mixin调用:.name(1, 2, 3;)
  • 逗号分隔的默认值:.name(@param1: red, blue;)

定义多个具有相同名称和参数的mixin是合法的。Less将使用所有可以应用的属性。如果你用mixin与一个参数,例如,. mixin(green),那么就会使用所有具有一个强制参数的mixin属性:

.mixin(@color) {
color-1:@color;
}
.mixin(@color;@padding:2){
color-2:@color;
padding-2:@padding
}
.mixin(@color;@padding;@margin:2){
color-3:@color;
padding-3:@padding;
margin: @margin @margin @margin @margin;
} .some .selector div{
.mixin(#008000);
}

输出:

.some .selector div {
color-1: #008000;
color-2: #008000;
padding-2:;
}

4.2 命令参数

mixin引用的时候仅使用参数名称引用即可,不需要有任何特殊的顺序

.class1(@color:black;@margin:10px;@padding:20px){
color: @color;
margin: @margin;
padding: @padding;
}
.demo1{
.class1(@margin:20px; @color:#33acfe);
}
.demo2{
.class1(#efca33; @padding:40px;)
}

输出:

.demo1 {
color: #33acfe;
margin: 20px;
padding: 20px;
}
.demo2 {
color: #efca33;
margin: 10px;
padding: 40px;
}

4.3  @arguments变量

@arguments在mixin中有一个特殊的含义,它包含所有传入的参数,当mixin被调用时。如果你不想处理个别参数,这很有用:

.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;)
}

输出:

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

4.4  高级参数和@rest变量

您可以使用  …  ,如果你想让你的mixin采取一个可变数目的参数。在变量名之后使用这个变量会将这些参数赋给变量。

.mixin(...) {        // 匹配0-N 个参数
.mixin() { // 只匹配0个参数
.mixin(@a: 1) { // 匹配0-1个参数
.mixin(@a: 1; ...) { // 匹配0-N个参数
.mixin(@a; ...) { // 匹配1-N个参数

此外,

.mixin(@a; @rest...) {
// @rest绑定到 @a 之后的参数
// @arguments 绑定到所有参数
}

4.5 模式匹配

有时,您可能希望根据你传递给它的参数来更改mixin的行为。让我们从一些基本的东西开始:

.mixin(@s; @color) { ... }

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

现在我们想要 .mixin的行为方式不同,基于@ switch的值,我们可以像这样定义 .mixin:

.mixin(dark; @color) {
color: darken(@color, 10%);
}
.mixin(light; @color) {
color: lighten(@color, 10%);
}
.mixin(@_; @color) {
display: block;
}

现在,如果我们运行:

@switch: light;

.class {
.mixin(@switch; #888);
}
输出:
.class {
color: #a2a2a2;
display: block;
}
上例说明:
  • 第一个mixin定义不匹配,因为它设置第一个参数是 dark 。
  • 第二个mixin定义匹配,因为它设置的参数是 light。
  • 第三个mixin定义匹配,因为它设置的参数为  任何值。
只有匹配到的 mixin 定义才会被使用,变量可以匹配并绑定到任何值。除了变量之外的,其他任何东西都只匹配一个与自身相等的值。
这里我们也可以对颜色的浓度进行匹配,例如:
.mixin(@a) {
color: @a;
}
.mixin(@a; @b) {
color: fade(@a; @b);
}

现在如果我们使用 .mixin只定义一个参数,我们将得到第一个定义的输出,但是如果我们用两个参数调用它,我们将得到第二个定义,即颜色值为 @ a淡入到 @ b。

less新手入门(二) Mixin 混合、带参数的Mixin的更多相关文章

  1. 带参数的Mixin

    带参数的mixin 在Less中,还可以像函数一样定义一个带参数的mixin, 这种形式叫做 Parametric Mixin,即带参数的混入.如: // 定义一个样式选择器 .borderRadiu ...

  2. python_request的安装及模拟json的post请求及带参数的get请求

    一.Requests模块安装 安装方式一:执行 pip install -U requests 联网安装requests 安装方式二:进入https://pypi.org/project/reques ...

  3. php微信开发之带参数二维码的使用

    最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...

  4. 二向箔web安全学院 --新手入门

    二向箔安全学院 click here 新手入门|梦境穿越 1.要建立一个这样的观念|理解:计算机之所以是计算机,是它具有重复进行某种指令的特征,因而我们写的代码 or 脚本,本质上就是让计算机代替我们 ...

  5. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  6. C#微信公众号接口开发实例-高级接口-申请带参数的二维码

    最近公司涉及到微信绑定用户,做了高级接口-申请带参数的二维码,总结了下微信开发接口.微信接口开发都是除了消息用的xml 回复基本上都是用json的形式传递信息(post/get),开发的方法基本都是一 ...

  7. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  8. 微信开发之——Php批量生成带参数的二维码

    带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧. 具体接口说明请参见,微信公众平 ...

  9. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

随机推荐

  1. mysql别名的使用

    在项目中遇到别名的问题,抽时间整理了一下 在sql中,合理的使用别名可以让sql更容易写并且提高可读性.别名使用 as 来表示,可以分为表别名和列别名. 别名应该是先定义后使用才对,所以首先要了解sq ...

  2. App网络管理

    安卓开发一般都需要进行日志管理,常用操作老司机已为你封装完毕,你可以用这份工具进行管理,具体可以查看源码,现在为你开车,Demo传送门. 站点 系统日志输出工具类 → AppKeyBoardMgr g ...

  3. ionic3 打包安卓平台环境搭建报错解决方案总结

    1.jvm虚拟机提供的运行空间小于项目所需的空间是报错.如图: 解决方法:在环境变量中配置jvm的运行内存大小,大于所需的内存即可. 其中:-Xmx512M可根据实际提示情况,进行更改,如1024M, ...

  4. RPA(Robotic Process Automation)的概要介绍

    最近因为公司业务的需要,开始关注RPA的内容,奈何国内相关的信息太少,只能硬着头皮啃英文了. 下面记录的内容作为学习笔记,有不对的地方请大家指教. 首先RPA(Robotic Process Auto ...

  5. JAVA爬虫代码

    工程目录: 所需要的jar包为:   jsoup-1.10.2.jar /** * Created by wangzheng on 2017/2/19. */ public class Article ...

  6. 使用Jquery.js框架和CSS3实现3D相册的制作

    有关3D相册的制作主要包括以下几个知识点: 1.有关图片的位置摆放,也就是一个相对定位绝对定位的使用: 2.有关CSS3中transform属性的使用(transform-style: preserv ...

  7. 数据库连接(Oracle/sqlServer增、删、改、查)

    一.把数据库包导入项目中,并且Build path(oracle例如ojdbc6.jar;sqlServer例如sqljdbc.jar) 二.开始操作 1.普通连接: String className ...

  8. 极简版ASP.NET Core学习路径及教程

    绝承认这是一个七天速成教程,即使有这个效果,我也不愿意接受这个名字.嗯. 这个路径分为两块: 实践入门 理论延伸 有了ASP.NET以及C#的知识以及项目经验,我们几乎可以不再需要了解任何新的知识就开 ...

  9. GraphicsMagick的命令行使用示例

    GraphicsMagick是从 ImageMagick 5.5.2 分支出来的,但是现在他变得更稳定和优秀,GM更小更容易安装.GM更有效率.GM的手册非常丰富GraphicsMagick的命令与I ...

  10. Golang 任务队列策略 -- 读《JOB QUEUES IN GO》

    Golang 在异步处理上有着上佳的表现.因为 goroutines 和 channels 是非常容易使用且有效的异步处理手段.下面我们一起来看一看 Golang 的简易任务队列 一种"非任 ...