第五节:CSS内置函数、Less/Scss简介以及核心用法总结

一. CSS中的内置函数

1. var

  使用CSS定义的变量;   属性名需要以两个减号(--)开始;   属性值则可以是任何有效的CSS值;

  注:自定义属性的可见作用域(只在选择器内部有效),所以推荐将自定义属性定义在html中,也可以使用 :root 选择器;

  <style>
    :root {
      /* 定义了一个变量(CSS属性) */
      /* 只有后代元素可以使用 */
      --main-color: #f00;
    }
    
    .box {
      color: var(--main-color);
    }

    .title {
      color: var(--main-color);
    }

  </style>

2. calc

 计算CSS值, 通常用于计算元素的大小或位置;

3. blur

 毛玻璃(高斯模糊)效果;

4. gradient

  颜色渐变函数;

 

二. Less简介

1. 背景

 

 2. 什么是less?

 

 3. less代码的编译方式

方案1:

    通过npm下载对应包进行编译。 针对vue项目

    详见:https://www.cnblogs.com/yaopengfei/p/15272441.html

              https://www.cnblogs.com/yaopengfei/p/17074777.html

         

方案2:

   在线编译 或者 vscode插件

   https://lesscss.org/less-preview/    该地址可以将less 转换成  css

 

方案3:

  针对传统的.html页面,如何让less直接生效呢,只需要引入一个工具类的js文件即可。 可以cdn,也可以下载到本地,建议下载到本地。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <link rel="stylesheet/less" href="./less/01_less的基本使用.less">
  <script src="https://cdn.jsdelivr.net/npm/less@4" ></script>

</head>

  特别注意: less文件的引入,rel位置是:rel="stylesheet/less"

 

三. Less核心用法

    详见官网:https://less.bootcss.com/#概览    (非常详细)

1. 变量(Variables)

    @变量名: 变量值;

@width: 10px;
@height: @width + 10px;

#header {
  width: @width;
  height: @height;
}

 

2.  嵌套(Nesting)

   Less 提供了使用嵌套(nesting)代替层叠多个选择器的情况。

css代码

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}

less代码

#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}

补充:  &  符号,表示所在选择器的名称  

css代码

.box1 {
	font-size: 20px;
	color: black;
}
.box1:hover {
	color: pink;
}

less代码

.box1 {
	font-size: 20px;
	color: black;
	// & 表示所在选择的名称,这里表示的是 .box1
	&:hover {
		color: pink;
	}
}

 

3.  运算(Operations)

 算术运算符 +-*/ 可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算。

 计算的结果以最左侧操作数的单位类型为准。

 如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如:px 到 cm 或 rad 到 % 的转换。

// 所有操作数被转换成相同的单位
@conversion-1: 5cm + 10mm; // 结果是 6cm
@conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // 结果是 4px

// example with variables
@base: 5%;
@filler: @base * 2; // 结果是 10%
@other: @base + @filler; // 结果是 15%

 

4.  混合(Mixins)

  在原来的CSS编写过程中,多个选择器中可能会有大量相同的代码, 在less中提供了混合(Mixins),将这些代码进行抽取到一个独立的地方,任何选择器都可以进行复用。

(1). 不含参数

less代码

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
#menu a {
  color: #111;
  .bordered();
}
.post a {
  color: red;
  .bordered();
}

css代码

#menu a {
  color: #111;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
.post a {
  color: red;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

注:混合在没有参数的情况下,小括号可以省略,但是不建议这样使用;

(2). 含参数

  传入参数,如果不传,则走默认值,这里的参数必须用@符号开头。

.box_border(@borderWidth: 5px, @borderColor: purple) {
  border: @borderWidth solid @borderColor;
}
.box2 {
  width: 150px;
  background-color: #0f0;

  .box_border(10px, orange);
}

 

5.  映射(Maps)

  可以理解成获取一个对象中的某个属性,通常和混合一起使用。

  注:弥补less中不能自定义函数的缺陷

.box_size {
	width: 200px;
	height: 100px;
}

.box1 {
	width: .box_size()[width]; //可以看做先获取这个对象,然后根据key获取内容   结果:200px
	background-color: #f00;
}

  注:当没有参数的时候,也可以写成:     width: .box_size[width];     但不建议省略

  下面的#号,代表id选择器

#colors() {
  primary: blue;
  secondary: green;
}
.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}

 

6.  extend继承

  用于复用代码; 和mixins相比,继承代码最终会转化成并集选择器

less代码

.box_border {
  border: 5px solid #f00;
}

.box {
  width: 100px;
  background-color: orange;

  &:extend(.box_border);
}

css代码

.box_border,.box {
  border: 5px solid #f00;
}

.box {
  width: 100px;
  background-color: orange;
}

 

7.  内置函数

   Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。 详见官网

.box {
  color: color(skyblue);
  width: convert(100px, "in");
  font-size: ceil(18.5px);
  background-color: orange;
}

 

8. 作用域

  Less 中的作用域与 CSS 中的作用域非常类似。首先在本地查找变量和混合(mixins),如果找不到,则从“父”级作用域继承。

代码1:

@var: red;

#page {
  #header {
    color: @var; // white
  }
  @var: white;
}

代码2:

@mainColor: #f00;

.box_mixin {
  @mainColor: orange;
}
.box {
  @mainColor: #0f0;
  .item {
    span {
      color: @mainColor;     //orange
      .box_mixin();
    }
  }
}

 

9. 注释(Comments)

  块注释和行注释都可以使用:

/* 一个块注释
 * style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;

 

10. 导入

    导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉: 

@import "library"; // library.less
@import "typo.css";

 

 

四.  Scss简介

 

 

五.  Scss核心用法

(参考文档:https://www.sass.hk/guide/        https://www.runoob.com/sass/sass-variables.html      https://sass-lang.com/documentation/ )

 

1.  嵌套

    同Less用法,  也可以使用 & 符号,表示当前选择器对应的名称。

 

2.  变量

  使用 $ 符号 进行声明。

$nav-color: #F90;
nav {
  $width: 100px;
  width: $width;
  color: $nav-color;
}

 

3.  混合器 (@mixin 与 @include)

  @mixin  : 用来声明混合器        @include: 用来调用混合器

(1). 声明和调用-不含参数

声明

@mixin important-text {
  color: red;
  font-size: 25px;
  font-weight: bold;
  border: 1px solid blue;
}

调用

.danger {
  @include important-text;
  background-color: green;
}

(2). 声明和调用-含参数

注:这里的参数必须以$符号开头。

声明

/* 混入接收两个参数 */
@mixin bordered($color, $width) {
  border: $width solid $color;
}

调用

.myArticle {
  @include bordered(blue, 1px);  // 调用混入,并传递两个参数
}
.myNotes {
  @include bordered(red, 2px); // 调用混入,并传递两个参数
}

(3). 声明和调用-含参数和默认值

声明

@mixin bordered($color: blue, $width: 1px) {
  border: $width solid $color;
}

调用

.myArticle {
  @include bordered(blue);  // 调用混入,第二个参数走默认值
}
.myNotes {
  @include bordered(); // 调用混入,两个参数都走默认值
}

 

4.  extend继承

  作用和效果 与 less中的完全相同,但是写法不一样。

scss代码

.button-basic  {
  border: none;
  padding: 15px 30px;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
}
.button-report  {
  @extend .button-basic;
  background-color: red;
}
.button-submit  {
  @extend .button-basic;
  background-color: green;
  color: white;
}

css代码

.button-basic, .button-report, .button-submit {
  border: none;
  padding: 15px 30px;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
}

.button-report  {
  background-color: red;
}

.button-submit  {
  background-color: green;
  color: white;
}

说明:

   使用 @extend 后,我们在 HTML 按钮标签中就不需要指定多个类 class="button-basic button-report" ,只需要设置 class="button-report" 类就好了。

   @extend 很好的体现了代码的复用。

 

5.  一些控制指令 

  详见文档:https://www.sass.hk/docs/

(1).  @for

@for 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动。这个指令包含两种格式:@for $var from <start> through <end>,或者 @for $var from <start> to <end>,区别在于 through 与 to 的含义:当使用 through 时,条件范围包含 <start> 与 <end> 的值,而使用 to 时条件范围只包含 <start> 的值不包含 <end> 的值。另外,$var 可以是任何变量,比如 $i<start> 和 <end> 必须是整数值。

scss代码

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

css代码

.item-1 {
  width: 2em; 
}
.item-2 {
  width: 4em; 
}
.item-3 {
  width: 6em; 
}

 

 

 

 

 

注: 还有很多,详见文档,这里不一 一列出了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2023-01-30 13:30  Yaopengfei  阅读(688)  评论(1编辑  收藏  举报