Less使用备忘录
定义
Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言,动态样式语言。
使用方式
直接引入less.js文件
好处:能获取客户端的数据,从而进行进一步的计算
坏处:在客户端解析Less,造成性能的浪费,不利于维护

Koala编译器
每次都需要启运软件,并配置编译配置,初学者推荐使用
Koala下载链接:http://koala-app.com/
在编辑器中实时编译
不同的编辑器需要进行不同的配置,不够灵活,而且并不是所有编辑器都支持,不想多安装别的软件且项目较简单可以使用
通过node等前端工程化工具(webpack,gulp)
目前主流的使用方式,特别是在vue,reaact项目中使用
特性
嵌套(Nesting)
Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力
// 编译前
#header {
color: black;
.logo {
width: 300px;
}
&:hover{
background-color:#666;
}
}
// 编译后
#header {
color: black;
}
#header .logo {
width: 300px;
}
#header:hover{
background-color:#666;
}
&表示当前选择器的父级
@规则嵌套和冒泡
// 编译前
.component {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
width: 800px;
}
}
// 编译后
.component {
width: 300px;
}
@media (min-width: 768px) {
.component {
width: 600px;
}
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
.component {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
.component {
width: 800px;
}
}
变量(Variables)
less可以像js一样支持变量定义,对于一些公共的值可以定义为变量,全局统一管理,项目中用的比较多的就是全局颜色值管理
// 编译前
@width: 10px;
@height: @width + 10px;
@bgColor: #fff;
#header {
width: @width;
height: @height;
background-color:@bgColor;
@bdColor: #ccc;
#logo{
border: 1px solid @bdColor;
}
}
// 编译后
#header {
width: 10px;
height: 20px;
background-color: #fff;
}
#header #logo{
border: 1px solid #ccc;
}
变量有作用域特性,上面示例中@bdcolor属于局部作用域,其它变量是全局的
变量的一些进阶用法
// 编译前
@my-selector: banner;
.@{my-selector} {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}
// 编译后
.banner {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}
--------------------------------------------------
// 编译前
@images: "../img";
body {
color: #444;
background: url("@{images}/white-sand.png");
}
// 编译后
body {
color: #444;
background: url("../img/white-sand.png");
}
--------------------------------------------------
// 编译前
@property: color;
.widget {
@{property}: #0ee;
background-@{property}: #999;
}
// 编译后
.widget {
color: #0ee;
background-color: #999;
}
--------------------------------------------------
// 编译前
@primary: green;
@secondary: blue;
.section {
@color: primary;
.element {
color: @@color;
}
}
// 编译后
.section .element {
color: green;
}
--------------------------------------------------
// 编译前
.block {
color: red;
.inner {
background-color: $color;
}
color: blue;
}
// 编译后
.block {
color: red;
color: blue;
}
.block .inner {
background-color: blue;
}
混合(Mixins)
将一组属性从一个规则集包含(或混入)到另一个规则集的方法
最简单的混合方式
// 编译前
.clearFix {
*zoom:1;
&:after{
content: '';
display: block;
clear: both;
}
}
#menu {
.clearFix();
}
// 编译后
#menu{
*zoom:1;
}
#menu:after{
content: '';
display: block;
clear: both;
}
带参数的混合方式:
参数可以有多个,也支持设置默认值,可以精简css的写法
// 编译前
.bdmix(@width, @style:solid, @color:#00f){
border: @width @style @color;
}
.box0{
.bdmix(1px);
}
.box1{
.bdmix(2px, dotted, #f00);
}
// 编译后
.box0{
border: 1px solid #00f;
}
.box1{
border: 2px dotted #f00;
}
混合传参支持arguments变量,适用于对参数无顺序要求的场景
// 编译前
.bdmix(@width, @style:solid, @color:#00f){
border: @agruments;
}
.box0{
.bdmix(1px);
}
// 编译后
.box0{
border: 1px solid #00f;
}
模式匹配
// 编译前
.bdmix(top, @width:1px){
border-top: @width solid red;
}
.bdmix(left, @width:1px){
border-left: @width solid red;
}
.bdmix(right, @width:1px){
border-right: @width solid red;
}
.bdmix(bottom, @width:1px){
border-bottom: @width solid red;
}
// 默认匹配值
.bdmix(@_, @width:1px){
width:100px;
}
.box0{
.bdmix(top);
}
.box1{
.bdmix(left, 2px);
}
.box2{
.bdmix(right, 2px);
}
.box3{
.bdmix(bottom, 2px);
}
// 编译后
.box0{
border-top: 1px solid red;
width:100px;
}
.box1{
border-left: 2px solid red;
width:100px;
}
.box2{
border-right: 1px solid red;
width:100px;
}
.box3{
border-bottom: 2px solid red;
width:100px;
}
命名空间
// 编译前
.blue{
.button{
background-color: blue;
}
}
.red{
.button{
background-color: red;
}
}
.box1{
.red > .button
}
// 编译后
.box1{
background-color: red;
}
混合的进阶用法
// 编译前
.foo (@bg: #f5f5f5, @color: #900) {
background: @bg;
color: @color;
}
.unimportant {
.foo();
}
.important {
.foo() !important;
}
// 编译后
.unimportant {
background: #f5f5f5;
color: #900;
}
.important {
background: #f5f5f5 !important;
color: #900 !important;
}
--------------------------------------------------
// 编译前
.mixin(@color: black; @margin: 10px; @padding: 20px) {
color: @color;
margin: @margin;
padding: @padding;
}
.class1 {
.mixin(@margin: 20px; @color: #33acfe);
}
.class2 {
.mixin(#efca44; @padding: 40px);
}
// 编译后
.class1 {
color: #33acfe;
margin: 20px;
padding: 20px;
}
.class2 {
color: #efca44;
margin: 10px;
padding: 40px;
}
映射(Maps)
从 Less 3.5 版本开始,你还可以将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用
// 编译前
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
// 编译后
.button {
color: blue;
border: 1px solid green;
}
继承(Extend)
将它所使用的选择器的样式与它所引用的选择器样式相合并
// 编译前
nav ul {
&:extend(.inline);
background: blue;
}
.inline {
color: red;
}
// 编译后
nav ul {
background: blue;
}
.inline, nav ul {
color: red;
}
注释(Comments)
支持通过//和//添加注释,//的注释不会带入解析后的css文件中,//是css的代码注释,会带入解析后的css文件中
其它
Math函数
// 编译前
.sizemix(@width, @height, @padding){
width: round(@width)*1px;
height: ceil(@height)*1px;
padding: floor(@padding)*1px;
}
.box0{
.sizemix(100.2, 99.2, 10.2)
}
// 编译后
.box0{
width: 100px;
height: 100px;
padding: 10px;
}
导入(Importing)@import
@import "common.less";
@import "lib.css";
避免编译 ~
// 编译前
@rem: 10rem;
.box{
width: 100/10rem;
font: (12/@rem)~"/"(20/@rem) "宋体";
}
// 编译后
.box{
width: 10rem;
font: 1.2rem/2rem "宋体";
}
// 编译前,从 Less 3.5 开始 @min768: ~"(min-width: 768px)"; 可以直接写成@min768: (min-width: 768px);
// 在 Less 3.5+ 版本中,许多以前需要“引号转义”的情况就不再需要了
@min768: ~"(min-width: 768px)";
.element {
@media @min768 {
font-size: 1.2rem;
}
}
// 编译后
@media (min-width: 768px) {
.element {
font-size: 1.2rem;
}
}
Less插件
通过手less插件,可以在less中实现一些JS才能完成的任务
// 插件代码
module.exports = {
install: function(less, pluginManager, functions) {
functions.add('pi', function() {
return Math.PI;
});
}
};
// 解析前
@plugin "my-plugin";
.show-me-pi {
value: pi();
}
// 解析名
.show-me-pi {
value: 3.141592653589793;
}
官方详细文挡:https://less.bootcss.com/#概览
Less使用备忘录的更多相关文章
- MementoPattern(备忘录模式)
/** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...
- C#设计模式-备忘录模式
访问者模式的实现是把作用于某种数据结构上的操作封装到访问者中,使得操作和数据结构隔离.而本文要介绍的备忘者模式与命令模式有点相似,不同的是,命令模式保存的是发起人的具体命令(命令对应的是行为),而备忘 ...
- Vuex2.0+Vue2.0构建备忘录应用实践
一.介绍Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,适合于构建中大型单页应用. ...
- 设计模式03备忘录(java)
先贴代码有空来写内容. 备忘录1 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作. class Student{ private String name; private Stri ...
- C#设计模式系列:备忘录模式(Memento)
1.备忘录模式简介 1.1>.定义 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 1.2>.使用频率 ...
- php实现设计模式之 备忘录模式
<?php /*备忘录模式:在不破坏封装的前提下,获取对象的内部状态,并且在对象外保存该状态.这样就可以将该对象恢复到保存之前的状态(行为模式) * * 发起人:记录当前时刻的内部状态,负责定义 ...
- 十一个行为模式之备忘录模式(Memento Pattern)
定义: 在不破坏原有封装的情况下,捕获一个对象的内部状态,并在对象之外保存.当对象出错或者无效是,可以根据该备忘录进行恢复. 结构图: Originator:原发类,被记录的对象,包含若干内部状态.一 ...
- 自适应备忘录 demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- java设计模式之备忘录模式
备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...
- 备忘录模式(Memento Pattern)
在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 备忘录模式主要思想是——利用备忘录对象来对保存发起人的内部状态,当发起人需要恢复原 ...
随机推荐
- 仿Linux内核链表实现合并有序链表、逆序单链表功能,C版本 JavaScript版本
直接贴上已经码好的: list_sort.c: #include <stdio.h> #include <string.h> #include <assert.h> ...
- Kubernetes基础(Pod?Label?Namespace?Deployment?Service?)(十二)
上面我们都是在架构层面了解 Kubernetes,但是似乎没有发现关于容器的说明,Kubernetes 作为容器编排引擎,那么他是怎么去对容器进行编排的呢?在 Kubernetes 集群中抽象了很多集 ...
- iOS中搜索框EVNCustomSearchBar使用小结
最近在项目开发中用到了搜索框,之前都是用的系统的searchbar,现有项目中用的是EVNCustomSearchBar,我试了一下还挺方便,下面说一下具体的用法. 第一步:引入添加相关的委托代理EV ...
- 托管服务简介IHostedService接口 继承 BackgroundSerice接口
1. 场景:代码运行在后台,比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨3 点把数据到处到数据库备份,每隔5秒在两张表之间同步一次数据 : 2. 托管服务实现IHoutedService接口 ...
- 警告:攻击者利用 SnoarQube 漏洞盗取国内多个机构的大量源码!
2021 年 10 月 22 日,国外知名媒体 cybernews 发文称,有未知攻击者攻击并渗透了博世 iSite 的服务器,并盗取了这家制造业巨头的 5G 物联网连接平台的源代码. 攻击者声称通过 ...
- 报名开启|QKE 容器引擎托管版暨容器生态发布会!
当下,"云原生"技术红利正吞噬旧秩序,重塑新世界. 但您的企业是否依然困惑:缺少运维人员或运维团队,想要专注于业务的开发,又不得不兼顾集群的日常运维:在生产环境中,为了保证业务的高 ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- SpringBoot 2.3 升级到 SpringBoot 2.7 爬坑-- SpringDoc & Swagger
目录 POM yml 配置自定义的 OpenAPI 规范 拦截器去除 swagger 的接口验证 模型 Controller 配置 常用注解 注意:Swagger支持SpringBoot2.0但不支持 ...
- 一文彻底弄懂MySQL的优化
在企业级 Web 开发中,MySQL 优化是至关重要的,它直接影响系统的响应速度.可扩展性和整体性能.下面从不同角度,列出详细的 MySQL 优化技巧,涵盖查询优化.索引设计.表结构设计.配置调整等方 ...
- 体验国产系统Deepin:很爽
最近开始把之前一直吃亏的旧电脑拿出来再利用了,先还是选择了熟悉的ubuntu系列.安装了Ubuntu 22.04之后,风风火火地把需要的开发环境搭建起来,虽然桌面有些卡顿,但瑕不掩瑜玉.趁着热情又想着 ...