LESS全面讲解

2023-05-16

一、基本介绍

1.1 css 预处理器的由来

​ 相信前端开发人员对与CSS(Cascading Style Sheet-级联样式表)这种「面向命名语言」,一定非常熟悉。你可能在某个舍友熟睡的深夜,还在电脑面前被 css 繁重、冗杂的样式,折磨的死去活来。

我们曾经面对 css 很多令人发指的不友好特性,也因为 css 的低复用性而刀耕火种。

css 预处理器就是这样被创造出来,弥补了直接写 css 的一些缺憾:

  • 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;
  • 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护。

1.2 什么是预处理

​ CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题。

1.3 主流的预处理器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okzXIxnY-1669359456806)(.\img\02.png)]

  • Sass:2007年诞生,最早也是最成熟的CSS预处理器,拥有ruby社区的支持和compass这一最强大的css框架,目前受LESS影响,已经进化到了全面兼容CSS的SCSS。ruby环境,让CSS有了更完整的逻辑和判断能力,比如支持if这些 ,基于ruby
  • Less:2009年出现,受SASS的影响较大,在ruby社区之外支持者远超过SASS,其缺点是比起SASS来,可编程功能不够,不过优点是简单和兼容CSS。著名的Twitter Bootstrap就是采用LESS做底层语言的。支持原生js,node, 让CSS有了基本的逻辑运算能力 , 基于js写的
  • Stylus:2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,在此社区之内有一定支持者,在广泛的意义上人气还完全不如SASS和LESS。 node – VUE阶段开发项目中我们使用stylus, 这个让CSS变成跟一门编程语言类似了

1.3 总结

  • Sass和Less语法严谨、Stylus相对自由。因为Less长得更像CSS,所以它可能学习起来更容易。
  • Sass 和 Compass、Stylus 和 Nib 都是好基友。
  • Sass 和 Stylus 都具有类语言的逻辑方式处理:条件、循环等,而 Less 需要通过When等关键词模拟这些功能,这方面 Less 比不上 Sass 和 Stylus。
  • Less 在丰富性以及特色上都不及 Sass 和 Stylus,若不是因为 Bootstrap 引入了 Less,可能它不会像现在这样被广泛应用

1.4 官方网站

  • 中文网站:http://lesscss.cn/
  • 英文官网:http://lesscss.org
  • less源码: https://github.com/cloudhead/less.js

二、基本使用

2.1 安装less

  1. 直接引用(不推荐)

    • 在引入之前,我们需要创建一个 Less 文件,Less 文件的后缀名为 .less,所以我们可以将文件命名为 index.less

    • 然后我们就可以通过 <link> 标签向 HTML 页面中引入 index.less 文件,和引入 CSS 文件类似,但是需要将 type 属性的值修改为 text/less

      <link rel="stylesheet/less" type="text/less" href="./index.less" />
      
    • 然后下载使用官方提供的 CDN 进行脚本引入

      <script src="https://cdn.bootcdn.net/ajax/libs/less.js/3.13.0/less.js"></script>
      
  2. 通过NPM安装(不推荐)

  3. vscode安装(推荐)

    • 打开VSCode编辑器,安装Easy LESS插件
    • 在文件夹中新建less文件,然后保存,即可在当前文件夹中编译出相应的css文件。

2.2 使用方式

  • 引入js的方式

    • less

      body {
          background-color: red;
      }
      
    • html

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
          <link rel="stylesheet" href="./index.less" type="text/less">
          <style type="text/less">
              #box{
                  width: 100px;
                  height: 100px;
                  background-color: pink;
                  .con{
                      width: 50px;
                      height: 50px;
                      background-color: green;
                  }
              }
          </style>
      </head>
      
      <body>
          <div id="box">
              <div class="con"></div>
          </div>
          <script src="https://cdn.bootcdn.net/ajax/libs/less.js/3.13.0/less.js"></script>
      </body>
      </html>
      
  • vsCode使用的方式

    • less

      body{
          background-color: aquamarine;
      }
      
    • html

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Document</title>
          <link rel="stylesheet" href="./Untitled-1.css">
      </head>
      <body>
      </body>
      </html>
      

2.3 注释

注释的适当使用可以保证代码的可读性,Less 支持两种类型的注释:多行注释和单行注释

注释使代码清晰,并允许用户轻松地理解。 您可以在代码中使用块样式和行内注释,但是当编译LESS代码时,单行注释不会显示在CSS文件中

  • less
#box{
    // 这是一个隐藏的注释
    width: 200px;
    height: 200px;
    background-color: aquamarine;
     /**
      font-size: 100px;
      我是一个可以显示的注释
    **/
}
  • css
#box {
  width: 200px;
  height: 200px;
  background-color: aquamarine;
  /**
      font-size: 100px;
      我是一个可以显示的注释
    **/
}

2.4 变量

多次重复相同的值,通常在您的样式表中可看到。不用多次使用相同的值,可以使用变量。它使代码的维护更容易,并且可以从单个位置控制这些值。

观察代码有什么问题:

#outer {
    width: 300px;
    height: 300px;
    background-color: aqua;
    margin: auto;
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
}
  • 变量作为样式的值使用
    • 一般使用的场景是部分重复的值和一些比较难以记忆的颜色值
@v:0;
#outer {
    width: 300px;
    height: 300px;
    background-color: aqua;
    margin: auto;
    position: absolute;
    left: @v;
    top: @v;
    bottom: @v;
    right: @v;
}
  • 变量作为变量的名字–@{变量名}
@bg : background;
#outer {
    width: 300px;
    height: 300px;
    @{bg}: aqua;
    margin: auto;
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
}
  • 变量作为选择器使用–@{选择器}
@o:#outer;
@{o} {
    width: 300px;
    height: 300px;
    background-color: aqua;
    margin: auto;
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
}
  • 变量作为url地址
@img1:'https://img2.baidu.com/it/u=2238622225,3486857165&fm=11&fmt=auto&gp=0.jpg';
@img2:url('https://img2.baidu.com/it/u=2238622225,3486857165&fm=11&fmt=auto&gp=0.jpg');
@img3:@img2;

#outer {
    width: 300px;
    height: 300px;
    background-color: aqua;
    margin: auto;
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
    // background:url(@img1) 0 0 no-repeat;
    // background: @img2 0 0 no-repeat;
    background: @img3 0 0 no-repeat;
}
  • 变量的计算
@v:0;
@z:@v + 2;
#outer {
    width: 300px;
    height: 300px;
    background-color: aqua;
    margin: auto;
    position: absolute;
    left: @v;
    top: @v;
    bottom: @v;
    right: @z;
}
  • 变量的延迟加载-面试题
@var: 0;
.class {
    @var: 1;
    .brass {
        @var: 2;
        //less变量延迟加载,也就是等待当前样式所在区域的代码全部执行完毕,才进行加载变量
        three: @var;
        @var: 3;
    }
    one: @var;
}

2.5 嵌套

2.5.1 基础嵌套

​ 在使用标准CSS时,要为多层嵌套的元素定义样式,要么使用后代选择器从外到内的嵌套定义,要么给这个元素加上类名或 id 来定义。这样的写法虽然很好理解,但维护起来很不方便,因为无法清晰了解到样式之间的关系。

在Less中,嵌套规则使这个问题迎刃而解。嵌套规则允许在一个选择器中嵌套另一个选择器,这更容易设计出精简的代码,并且样式之间的关系一目了然。

body{
    background-color: red;
    .outer{
        width: 1200px;
        border: 1px solid black;

        .header{
            height: 100px;
            background-color: yellow;
        }
        .con{
            margin: 0 auto;
            border: 1px solid green;
        }
        .footer{
            width: 1200px;
            box-shadow: 0px 0px 0px 0px #ccc;
        }
    }
}

2.5.2 父级引用

使用&:代表前边的所有父级元素,常用在伪元素 伪类 css结构类等需求上

内层选择器前面的 & 符号就表示对父选择器的引用。在一个内层选择器的前面,如果没有 & 符号,则它被解析为父选择器的后代;如果有 & 符号,它就被解析为父元素

ul{
    li{
        line-height: 40px;
        &:nth-child(1){
            line-height: 80px;
        }
    }

    li:nth-child(1){
        line-height: 80px;
    }
}
div{
    height: 100px;
    &>span{
        width: 100px;
        &>nav{
            background-color: red;
        }
    }
}

2.6 less运算

运算类型:任何数值,颜色,变量都可以运算

单位:less会给你自动推算单位,所以不需要每一个都加单位,但保证至少有一个加了单位

注意:运算符与数值之间要以空格分开,涉及优先级时以()进行优先级计算

2.6.1 数值型运算

header{
    width: 100px + 10;
    height: 20 + 10px;

    // height: 20 - 10px;
    // height: 20 * 10px;
    // 注意除法必须加()
    // less中做算术运算的时候一般加法+,减法-,乘法*
    // 可以直接写基本不会出现什么问题但是除法/需要()括起来,
    // 不然会认为你的是有两个值 值一 / 值二,不会进行计算返回计算结果
    // height: (20 / 10px);
}

思考:如果两个数值都有单位,那么会返回什么单位

header{
    width: 100px + 10;
    height: 20rem + 10px;
}

注意:单位加在哪里都行,只要有一个地方有单位,less就能推断出计算后结果的单位。

2.6.2 颜色计算

规则: less在运算时,先将颜色值转化为rgba模式,然后再转换为16进制的颜色值并返回

注意1 : 在颜色运算时,能直接使用颜色的名称如green进行运算,比如 red - 55 = #c80000,但是在之前这个功能无效

注意2 : 实际上是拆分之后再转化成16进制的 #ffffff - 55 = c8c8c8 = rgb(200,200,200),拆成两个一个,分别代表r,g,b

注意3 : 加的值超过255,只会取到255 #111111 + 260 = #ffffff

注意4 : rgb模式的取值为 0~255

header {
  color: #fff;
  color: #f5f5f5;
  background-color: #c80000;
  background-color: #ffffff;
  background-color: #373737;
}

2.6.3 变量计算

@w:20px;
header{
    width: @w + 2;
}

2.7 less混合

​ 混合是一种将一组属性从一个规则集包含或混入到另一个规则集的方法。简单一点来说,其实混合就有点类似编程语言中的函数,通过这种方式,可以在代码中实现复用。

2.7.1 普通的Mixins

.s1{
  font-size: 10px;
  color: #ccc;
}
.s2{
  font-size: 10px;
  color: #ccc;
  padding: 10px;
}

可以很明显的看到,.s1 样式类中的代码,.s2 样式类中也有,这里是只有两个样式类,如果有很多个选择器时,是不是就会造成很多重复的代码

混合 Mixin 就可以帮助我们来解决这个问题,实现代码的复用。使用起来也很简单,只需要在 .s2 中引用 .s1 即可

.s1 {
  font-size: 14px;
  color: #ccc;
}
.s2 {
  .s1;//注意没有加();
  padding: 10px;
}

思考:如果有很多的选择器都有类似样式,那么上面这种方式的缺点?

2.7.2 不输出的Mixins

我们可以看到在编译时, .s1.s2 两个样式类都被编译成了 CSS 代码,但是某些时候有可能这有可能造成重复,所以我们可能不希望 .s1 样式类本身被编译到 CSS 文件中

.s1(){
  font-size: 14px;
  color: #ccc;
}

.s2{
  .s1();
  padding: 10px;
} 

2.7.3 带参数的Mixins

在声明混合的时候,可以在小括号中声明形参。形参由@+变量名定义。调用的时候可以传入实参

如果很多的位置都需要使用某一个Mixins,而且参数还不一样的话,那么就可以使用参数的Mixins

.s1(@f,@c){
    font-size: @f;
    color: @c;
  }
.s2{
    .s1(14px,red);
    padding: 10px;
  } 

思考:如果有屌丝不想按照顺序传递参数,咋办?

2.7.4 参数有默认值的混合

可以直接在混合中定义形参的时候,给形参设置默认值,比如(@color:red),当使用混合的时候,如果有实参传递,则使用实参的值,否则使用形参的默认值

.s1(@f:10px,@c:red){
    font-size: @f;
    color: @c;
  }
  
.s2{
    .s1();
    padding: 10px;
} 

2.7.5 Mixins命名空间

Less 中也有命名空间的概念,命名空间用于在通用名称下对 Mixins 进行分组,使用命名空间可以避免名称冲突,并从外部封装 Mixins 组。例如可以将类选择器或者ID选择器作为一个命名空间,然后将 Mixins 放在命名空间中,这样可以避免与引入的其他文件造成冲突

.name_space{ 
    .s1(){
      font-size: 12px;
    }
  }
  .s2{
    // .name_space > .s1();  // 引用  以下哪种方式都可以
    // .name_space.s1;
    // .name_space.s1();
    // .name_space .s1;
    .name_space .s1();
  }

2.7.6 !important关键字

!important 关键字用于覆盖特定属性。如果我们在 Mixins 引用后面加上 !important 关键字,则会将 Mixins 中的所有属性标记为 !important

html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>important关键字</title>
        <link rel="styleSheet" type="text/css" href="./index.css">
    </head>
    <body>
        <h1>welcome to red romance!</h1>
    </body>
</html>   

less

.mixin(){
  color: red;
}
h1{
  color: #ccc;
  .mixin() !important;
}

2.7.7 匹配模式

在Less中尝试利用模式匹配替if/else,其执行原理类似switch/case。

因为一个混合可能有多种形式,所以Less提供了一种机制,允许根据参数的值来改变 mixin的行为。

其中当参数是@_开头的,是调用此混合必选的。

//模式匹配中,公有的样式混合 需要书写@_做为参数
.main(@_) {
    width: 100px;
    height: 100px;
}

.main(color1) {
    background-color: pink;
}

.main(color2) {
    background-color: yellow;
}

.outer {
    .main(color1)
}

2.7.8 重载

相同的混合,不同的行为,可以根据调用的时候传入的实参个数选择匹配的混合内容

.main(@w) {
    width: @w;
}

.main(@w, @h) {
    width: @w;
    height: @h;
}

.outer {
    //重载:根据参数个数不同,来匹配不同的混合
    .main(100px, 100px)
}

2.7.9 守卫

根据判断条件选中Mixin的行为

类似于JavaScript的if/else,使用when语法

Guards 允许我们使用>,>=,<,<=,=,关键字true(只匹配关键字true,非true不会匹配),支持逻辑and ,not ()

同时我们可以使用“,”分割多个Guards,其表示只要其中任意一个满足就为true

案例1:

.main(@a) when(@a>30) {
    width: 100px;
    height: 100px;
}

.main(@a) when(@a<=30) {
    width: 200px;
    height: 200px;
}

.outer {
    .main(30)
}

案例2:

.main(@w) when(@w>1000),(@w<200) {
    width:~"@{w}px";
    height: 100px;
}

.main(@w) when(@w<=1000) and (@w>=200) {
    width:~"@{w}px";
    height: 50px;
}
.outer {
    .main(3000)
}

2.8 字符串插值

变量可以用类似ruby和php的方式嵌入到字符串中,通过**@{name}**这样的结构:

@h: 30;
@baseUrl: "http://redromance.vip:6666/";
.outer {
    //变量加单位,字符串拼接 再转义
    //@{h}在字符串中书写变量
    //~转义 把字符串转成css可用代码
    height:~"@{h}px";
    //字符串插值
    background: url("@{baseUrl}01.png")
}

.con {
    background: url("@{baseUrl}02.png")
}

2.9 文件导入

  • 导入Less文件:
    @import “test.less”;
    //等价于@import “test”(可以不带后缀)

@import 'test1';

  • 导入css文件:
    @import “lib.css”;
    最后引入,易导致重绘和重排,不允许使用

html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <link rel="stylesheet" href="./01.css"> -->
    <style>
        @import "./01.css";
    </style>
</head>

<body>
    <div class="outer"></div>
</body>

</html>

css

div {
  width: 200px;
  height: 200px;
  background-color: red;
}

2.10 less函数

参考文献:https://less.bootcss.com/functions/#less-%E5%87%BD%E6%95%B0

  • 逻辑函数

    • if

      @c: boo;
      div {
          margin: if((2 > 1), 1, 0);
          color:  if((iscolor(@c)), @c, black);
      }
      
    • boolean

      @c: boolean(2<1);
      
      div {
          margin: if(@c, 1, 0);
      }
      
  • 列表函数

    • length

      p{
      	@list: "banana", "tomato", "potato", "peach";
      	n: length(@list);
      }
      
    • extract

      div{
          @list: apple, pear, coconut, orange;
          value: extract(@list, 3);
      }
      
    • range

      div{
          value: range(4);
      }
      
  • 数学函数

    • ceil

      ceil(2.4)
      
    • floor

      floor(2.6)
      
    • percentage

      percentage(0.5)
      
    • round

      round(1.67, 1)
      
    • sqrt

      sqrt(324)
      
    • abs

      abs(-18)
      
    • pow

      pow(5, 2);
      
    • mod

      mod(10,6)
      
    • min

      min(1,2,3,4,5)
      
    • max

      max(1,2,3,4,5)
      
  • 颜色调试

    div{
        v:hsl(90, 80%, 50%);
        value: desaturate(hsl(90, 80%, 50%), 20%);
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LESS全面讲解 的相关文章

  • 【51单片机】74HC595串转并 使用

    74HC595通常是用来解决单片机I O口不够用的情况 如果你对该芯片没有任何的了解 xff0c 建议先观看以下两篇文章 xff0c 它会对你接下来的使用很有帮助 如果你只想直接快速能上手使用 xff0c 那么请跳过两篇文章 xff0c 直
  • STC12C5A60S2最小系统

    STC12C5A60S2最小系统 xff0c 跟51一个样的 初学者自己焊接最小系统的时候不要忘了共VCC和共地 xff0c 就是电路中所有VCC连接一起 xff0c 接地也是 xff0c 这是新手比较容易忽视的问题
  • 水位传感器(Water Sensor)原理图

    写资料 论文用 2022年5月23日应要求 xff0c 重新更新了一张 xff0c 主要还是平行导线没有找到太好的方法 xff0c 所以就随便画了几根主线代替一下 xff0c 如果有更好的办法可以留言我 另外 xff0c 为了照顾一些不需要
  • 光敏电阻简单应用——晚上灯亮,白天灯灭

    光敏电阻就是对光比较敏感一种类型的电阻 常见光敏电阻有以下特性 xff1a 光度越亮 xff0c 电阻越小 xff1b 环境越暗 xff0c 电阻越大 那么 xff0c 如何利用光敏电阻特性 xff0c 在晚上的时候灯可以点亮 xff0c
  • 单片机小精灵(延时、定时计算软件)

    使用延时计算软件可以省略自己计算的时间 xff0c 大大提高效率 使用方式 xff1a 1 选择单片机晶振频率 xff0c 一般是 11 0592 和 12 MHz 2 选择单片机模式 xff0c C51 C52系列一般都是12T 不清楚可
  • 【STM32F103】0.96寸OLED工程模板

    主程序页面 xff1a OLED显示页面 xff1a 可实现功能函数 xff1a 百度云链接 xff1a 0 96寸OLED工程模块https pan baidu com s 1a1ae4NQSUZh0Cb5EyUGuEg https pa
  • 整流电路详解

    整流电路定义 什么是整流电路 xff1f 整流电路说的是把交流电转化为直流电 xff0c 一般情况下是由变压器 整流主电路和滤波电路构成 xff0c 如果想得到一个恒定的电压值 xff0c 这里还需要加上一个稳压电路 稳压电路先不说 xff
  • PCF8591 A/D转换模块

    PCF8591 的通信接口是 IIC协议 xff0c 编程需要对 PCF8591 进行初始化 PCF8591接线原理图 xff1a AIN0 AIN3 模拟信号的4个输入端口A0 A2 芯片地址低三位 VDD GND 电源 地 电源电压2
  • Golang和Qt, 开发桌面应用程序

    简单的例子 参考 https tw saowen com a e0496e173ca67dd7f0dc111cbcb872a53a14d8275e750219f5d2854c82c05749 https github com thereci
  • DY-SV17F语音播放模块应用篇一 【IO独立模式】

    DY SV17F模块模式分为I O组合模式和I O独立模式 xff0c 每种模式下又有两种方式 按键触发模式和电平触发模式 xff0c 低电平有效 注 按键触发是指低电平触发后随即释放电平 xff0c 类似于按键按下后弹起 xff0c 故称
  • 同步串行通信、异步串行通信、并行通信的区别

    一 什么是同步 异步 xff1f 同步 xff1a 通迅双方靠一条时钟线约定速率 异步 xff1a 通迅双方各自约定速率 传送的消息必须有起始位 校验位和结束位 等信号 xff0c 确保接收的信息不出错 二 什么是串行 并行 xff1f 串
  • 同相比例和反相比例运算放大电路

  • 【51】PWM控制使用

    PWM xff0c 英文名Pulse Width Modulation xff0c 是脉冲宽度调制缩写 xff0c 它是通过对一系列脉冲的宽度进行调制 xff0c 等效出所需要的波形 xff08 包含形状以及幅值 xff09 通过调节占空比
  • STM32的八种工作模式

    一 模式介绍 STM32单片机具有高性能 低成本 低功耗的优点 xff0c 与它打交道就必须先了解它的几种工作模式 xff0c 它共有八种IO口模式 xff0c 分别是 xff1a 模拟输入 浮空输入 上拉输入 下拉输入 开漏输出 推挽输出
  • linux远程管理

    linux远程管理 一 关闭与重启二 查看或配置网卡信息三 远程连接ssh四 远程复制scp五 免密码登录与别名六 修改shell七 通过域名找IP地址 一 关闭与重启 shutdown 一分钟后关机 shutdown span class
  • 逃离塔克夫TT辅助注入器再次更新0.56

    更新版本有0 12 7 9018和0 12 4 6297的辅助TT 2021年6月12日14 xff1a 50更新 下载加群 xff1a 821414423 部分截图 免费 xff01
  • spring junit测试时下面爆红javax.net.ssl.SSLException的解决方法

    做软工三项目时 xff0c 发现测试用例通过了 xff0c 但控制台最下面仍然爆红 xff1a 解决方法 xff1a 在application yml的database url后面加上 xff1a amp useSSL 61 false 然
  • 设计模式:(生成器模式)

    1 定义 建造者模式 xff08 Builder Pattern xff09 使用多个简单的对象一步一步构建成一个复杂的对象 这种类型的设计模式属于创建型模式 xff0c 它提供了一种创建对象的最佳方式 一个 Builder 类会一步一步构
  • Anaconda添加、删除、查找环境变量 +添加conda为内部变量

    1 conda不是内部变量 xff0c 怎么办 xff1f 此电脑 属性 高级系统设置 环境变量 双击Path 新建 浏览 2 安装Anconda是否成功 打开cmd W 43 R 输入 xff1a conda V 3 conda安装有哪些
  • 移动立方体(Marching Cubes,MC)算法

    移动立方体 xff08 Marching Cubes xff09 算法是面绘制算法中的经典算法 xff0c 它是W Lorensen等人于1987年提出的体素级重建算法 xff0c 也被称为 等值面提取 xff08 Isosurface E

随机推荐

  • iOS中的表视图

    表视图 1 表视图分类 普通表视图 主要用于动态表 xff0c 一般在单元格数目未知的情况下使用 分组表视图 xff1a 可以用于动态表和静态表 动态表分组时 xff0c 单元格分成不同的部分 xff0c 而每一部分中单元格中的数据是相似的
  • 1.文件包含漏洞

    一 什么是文件包含漏洞 随着网站业务的需求 程序开发人员一般希望代码更灵活 所以将被包含的文件设置为变量 用来进行动态调用 但是正是这种灵活性通过动态变量的方式引入需要包含的文件时 用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕
  • Java:用Java程序打印出所有的 “水仙花数 ”。

    题目 xff1a 利用Java程序打印出所有的 34 水仙花数 34 所谓 34 水仙花数 34 是指一个三位数 xff0c 其各位数字立方和等于该数本身 例如 xff1a 153是一个 34 水仙花数 34 xff0c 因为153 61
  • Ubuntu22 使用devstack一键部署OpenStack

    一 虚拟机准备 主要是因为上次安装稀里糊涂找的教程 xff0c 后来有问题了哈哈 xff0c 这次仔细看了油管教程还有官网教程 xff0c 记录一下后面要是出问题了方便重装哈哈 配置 xff1a 1 进入root账号 sudo passwd
  • 素数筛(埃拉托斯特尼筛和欧拉筛)

    线性筛素数 题目描述 给定一个范围 n xff0c 有 q 个询问 xff0c 每次输出第 k 小的素数 输入格式 第一行包含两个正整数 n q分别表示查询的范围和查询的个数 接下来 q行每行一个正整数 k xff0c 表示查询第 k小的素
  • typescript 错误码大全

    转载于https www easemob com question 6196 1002 错误 Unterminated string literal 未终止的字符串文本 1003 错误 Identifier expected 应为标识符 1
  • 《C++ 新经典》 并发与多线程

    文章目录 本章内容概述一 基本概念1 并发 xff0c 进程 xff0c 线程2 并发的实现2 1 多进程并发2 2 多线程并发 3 C 43 43 11 新标准线程库 二 线程基本使用1 线程创建与启动2 其余线程创建方法 三 线程参数传
  • 基于 Linux 的 Ngina-server 通信架构 C++ 实现

    文章目录 本章内容概述一 项目概述1 项目描述2 项目技术 二 项目详解1 项目框架2 项目流程 三 项目拓展1 简要介绍一下你的项目 xff1f 2 项目程序结构 xff1f 3 线程之间如何同步 xff1f 4 如何处理客户端发送的数据
  • ubuntu 查看占用文件空间大小

    1 查看分区情况 fdisk l 2 查看系统的磁盘空间占用情况 df h df TH 3 查看某个目录的使用空间大小 du sh 需要先进入该目录 或者后面加上路径 du sh 路径 4 查看该目录下 每个文件夹占用的空间大小 查看某目录
  • 七段码(蓝桥杯真题)——python求解

    题目如下 xff1a 小蓝要用七段码数码管来表示一种特殊的文字 上图给出了七段码数码管的一个图示 xff0c 数码管中一共有 7 段可以发光的二极管 xff0c 分别标记为 a b c d e f g 小蓝要选择一部分二极管 xff08 至
  • 【Ubuntu】解决安装显卡驱动后无法进入系统

    像这样 xff08 图片来源于网络 xff0c 侵删 xff09 xff1a 这是显卡驱动安装不正确造成的 解决方法 下载一个easyBCD xff0c 在windows系统下 xff08 双系统 winpe xff09 编辑引导分区 xf
  • 放苹果(递归)

    问题描述 把m个同样的苹果放在n个同样的盘子里 xff0c 允许有的盘子空着不放 xff0c 问有多少种不同的分法 xff1f 注 xff1a 5 1 1和1 1 5是同一种分法 输入 苹果个数m 和盘子个数n 0 lt 61 M xff0
  • 利用冒泡排序,输入10个数字,从小到大排序并输出

    如果有n个数 xff0c 要进行n 1趟比较 xff0c 在第一趟要进行n 1次两两比较 xff0c 在第j趟要进行n j次两两比较 include lt stdio h gt int main int a 10 i j t printf
  • CCF 炉石传说 满分代码(详细注释) + 解题思路 (结构体模拟) 201609-3

    题目描述 解题思路 将每个人用结构体存储生命和攻击力 用一个结构体二维数组存储所有人员信息 p 0 0 存储先手英雄 xff0c p 0 1 7 存储先手的随从 p 1 0 存储先手英雄 xff0c p 1 1 7 存储先手的随从 读入n个
  • 201809-3 CCF 元素选择器 满分题解(超详细注释代码) + 解题思路(超详细)

    问题描述 解题思路 根据题意可以知道在查询中可以分为两种情况 第一种是查询一个标签选择器或者id选择器 xff08 可以称为一级查询 xff09 第二种就是存在大于两级的查询 xff08 可以称为多级查询 xff09 显然第一种查询需要存储
  • 7-1 【模板】KMP字符串匹配 (20 分)

    7 1 模板 KMP字符串匹配 20 分 给出两个字符串text和pattern xff0c 其中pattern为text的子串 xff0c 求出pattern在text中所有出现的位置 为了减少骗分的情况 xff0c 接下来还要输出子串的
  • Anaconda安装教程及环境变量添加

    1 软件下载 1 1 点击Anaconda官网 xff0c 显示如下网页信息 1 2 点击下载 xff08 点击下载会自动识别你的计算机系统 xff0c 直接下载即可 xff09 右上角会提示具体下载信息 xff0c 等待下载完成 xff0
  • Arch的双显卡驱动

    Arch 的双显卡驱动 xorg 注意 xff1a 本文两种方案不可共存 xff01 xff01 optimus manager 方案 I卡驱动 不用装intel的驱动 xff0c 直接用mesa的就行 N卡驱动 编辑 pacman con
  • 现有关系数据库如下: 学生(学号,姓名,性别,专业) 课程(课程号,课程名,学分) 学习(学号,课程号,分数) 分别用关系代数表达式和 SQL 语句实现下列 1—5 小题(注意:每小题都要分别 写出关

    现有关系数据库如下 xff1a 学生 xff08 学号 xff0c 姓名 xff0c 性别 xff0c 专业 xff09 课程 xff08 课程号 xff0c 课程名 xff0c 学分 xff09 学习 xff08 学号 xff0c 课程号
  • LESS全面讲解

    一 基本介绍 1 1 css 预处理器的由来 相信前端开发人员对与CSS xff08 Cascading Style Sheet 级联样式表 xff09 这种 面向命名语言 xff0c 一定非常熟悉 你可能在某个舍友熟睡的深夜 xff0c