首页 > 其他分享 >Less从入门到精通

Less从入门到精通

时间:2023-05-30 17:45:52浏览次数:44  
标签:精通 入门 Less color width main border CSS

目录

Less从入门到精通

Less预处理语言

Less是一种动态样式语言;为提高css应用的灵活性和效率,LESS 将 CSS 赋予了动态语言的特性,如 变 量, 继承, 运算, 函数。LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助

Node.js在服务端运行。

1.less安装和使用

1.1 学习目标

image-20230530155023782

1.2 CSS的短板

​ 作为前端学习者的我们都要学些 CSS ,它作为前端开发的三大基石之一,时刻引领着 Web 的发展 潮向。 而 CSS 作为一门标记性语言,可能给初学者第一印象就是简单易懂,毫无逻辑,不像编程该有的 样子。在语法更新时,每当新属性提出,浏览器的兼容又会马上变成绊脚石,可以说 CSS 短板不容忽 视。 问题的诞生往往伴随着技术的兴起, 在 Web 发展的这几年, 为了让 CSS 富有逻辑性,短板不那么 严重,涌现出了 一些神奇的预处理语言。 它们让 CSS 彻底变成一门 可以使用 变量 、循环 、继承 、自 定义方法等多种特性的标记语言,逻辑性得以大大增强。

1.3 预处理语言的诞生

其中常用的有三门语言:Sass、Less 、Stylus 。

  1. Sass 诞生于 2007 年,Ruby 编写,其语法功能都十分全面,可以说它完全把 CSS 变成了一门编程 语言。另外 在国内外都很受欢迎,并且它的项目团队很是强大 ,是一款十分优秀的预处理语言。
  2. Stylus 诞生于 2010 年,来自Node.js 社区,语法功能也和 Sass 不相伯仲,是一门十分独特的创新 型语言。
  3. Less 诞生于 2009 年,受Sass的影响创建的一个开源项目。 它扩充了 CSS 语言,增加了诸如变 量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。

1.4 less介绍

​ Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更 易维护和扩展。

​ Less 扩充了 CSS 语言,增加了诸如变量、混合(mixin)、运算、函数等功能。 Less 既可以运行在服务 器端(Node.js 和 Rhino 平台)也可以运行在客户端(浏览器)。 在 Node.js 环境中使用 Less :

npm install -g less

在浏览器环境中使用 Less :

<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js" >
</script>

1.5 less的使用

1.5.1 注释

注释

less的注释有两种

//这种注释,在编译后不会出现在CSS文件上
/*这种注释,编译后会出现在CSS文件上*/
1,5,2 less变量

我们常常在 CSS 中 看到同一个值重复多次,这样难易于代码维护。 理想状态,应是下面这样:

const bgColor="skyblue";
$(".post-content").css("background-color",bgColor);
$("#wrap").css("background-color",bgColor);
$(".arctive").css("background-color",bgColor);

​ 只要我们修改 bgColor 这一个变量, 整个页面的背景颜色都会随之改变。而 Less 中的变量十分强 大,可化万物,值得一提的是,其变量是常量 ,所以只能定义一次,不能重复使用。

值变量

/* Less */
@color: #999;
@bgColor: skyblue;//不要添加引号
@width: 50%;

#wrap {
  color: @color;
  background: @bgColor;
  width: @width;
}

/* 生成后的 CSS */
#wrap {
  color: #999;
  background: skyblue;
  width: 50%;
}

​ 以 @ 开头 定义变量,并且使用时 直接 键入 @ 名称。在平时工作中,我们就可以把常用的变量封 装到一个文件中,这样利于代码组织维护。

@lightPrimaryColor: #c5cae9;
@textPrimaryColor: #fff;
@accentColor: rgb(99, 137, 185);
@primaryTextColor: #646464;
@secondaryTextColor: #000;
@dividerColor: #b6b6b6;
@borderColor: #dadada;

1.6 总结

image-20230530155044487

2. less变量

2.1 学习目标

image-20230530155106053

2.2 选择器变量

让选择器变成动态

/* Less */
@mySelector: #wrap;
@Wrap: wrap;
@{mySelector}{ //变量名 必须使用大括号包裹  		   color: #999;  
  width: 50%;
}
.@{Wrap}{  
  color:#ccc;
}

/* 生成的 CSS */
#@{Wrap}{  
	color:#666;
}
#wrap{  
    color: #999;  
    width: 50%;
}
.wrap{  
    color:#ccc;
}
#wrap{  
    color:#666;
}

2.3 属性变量

可减少代码书写量

/* Less */
@borderStyle: border-style;
@Soild:solid;

#wrap{
 @{borderStyle}: @Soild;//变量名 必须使用大括号包裹
}

/* 生成的 CSS */
#wrap{
  border-style:solid;
}

2.4 url变量

项目结构改变时,修改其变量即可。====一般用来精灵图

/* Less */
@images: "../img";//需要加引号
body {
  background: url("@{images}/dog.png");//变量名 必须使用大括号包裹
}

/* 生成的 CSS */
body {
  background: url("../img/dog.png");
}

2.5 声明变量

有点类似于下面的混合方法:

  • 结构: @name: { 属性: 值 ;};

  • 使用:@name();

/* Less */

@background: {background:red;};
#main{
    @background();
}

@Rules:{
	width: 200px;
    height: 200px;
    border: solid 1px red;
};

#con{
  @Rules();
}

/* 生成的 CSS */

#main{
  background:red;
}

#con{
  width: 200px;
  height: 200px;
  border: solid 1px red;
}

2.6 变量运算

不得不提的是,Less 的变量运算十分强大。

  • 加减法时 以第一个数据的单位为基准
  • 乘除法时 注意单位一定要统一
  • 在连接运算的时候,注意添加空格避免变量产生找不到的报错
/* Less */
@width:300px;
@color:#222;

#wrap{
  width:@width - 20;
  height:@width - 20*5;
  margin:(@width - 20)*5;
  color:@color*2;
  background-color:@color + #111;
}

/* 生成的 CSS */
#wrap{
  width:280px;
  height:200px;
  margin:1400px;
  color:#444;
  background-color:#333;
}

2.7 变量作用域

一句话理解就是:就近原则。

/* Less */
@var: @a;
@a: 100%;

#wrap {
  width: @var;
  @a: 9%;
}

/* 生成的 CSS */
#wrap {
  width: 9%;
}

2.8 用变量定义变量

/* Less */
@fnord:  "I am fnord.";
@var:    "fnord";
#wrap::after{
  content: @@var; //将@var替换为其content:@fnord;
}

/* 生成的 CSS */
#wrap::after{
  content: "I am fnord.";
}

2.9 总结

image-20230530161344813

3. less嵌套

3.1 学习目标

image-20230530161359947

3.2 &的妙用

& :代表的上一层选择器的名字,此例便是 header 。

/* Less */
#header{
  &:after{
    content:"Less is more!";
 }
  .title{
    font-weight:bold;
 }
  &_content{//理解方式:直接把 & 替换成 #header
  margin:20px;
 }
}

/* 生成的 CSS */
#header::after{
  content:"Less is more!";
}

#header .title{ //嵌套了
  font-weight:bold;
}

#header_content{//没有嵌套!
    margin:20px;
}

3.3 媒体查询

在以往的工作中,我们使用 媒体查询,都要把一个元素分开写:

#wrap{
  width:500px;
}

@media screen and (max-width:768px){
  #wrap{
    width:100px;
 }
}

Less 提供了一个十分便捷的方式:

/* Less */
#main{
    //something...

    @media screen{
        @media (max-width:768px){
          width:100px;
       }
   }
    @media tv {
      width:2000px;
   }
}

/* 生成的 CSS */
@media screen and (maxwidth:768px){
  #main{
      width:100px; 
 }
}

@media tv{
  #main{
    width:2000px;
 }
}

唯一的缺点就是每一个元素都会编译出自己 @media 声明,并不会合并。

3.4 实战技巧

可以借助 Less 在元素中,去定义自己的私有样式。

/* Less */
#main{
  // something..
  &.show{
    display:block;
 }
}

.show{
  display:none;
}

const main = document.getElementById("main");
main.classList.add("show");

结果:

#main.show{
  display:block;
}

.show{
  display:none; //会被覆盖。

}

3.5 总结

image-20230530162058705

4.混合方法

4.1 学习目标

image-20230530162217733

4.2 无参数方法

方法犹如声明的集合,使用时直接键入名称即可。

/* Less */
.card { // 等价于 .card()
    background: #f6f6f6;
    -webkit-box-shadow: 0 1px 2px rgba(151, 151, 151, .58);
    box-shadow: 0 1px 2px rgba(151, 151, 151, .58);
}
#wrap{
  .card;//等价于.card();
}

/* 生成的 CSS */
#wrap{
  background: #f6f6f6;
  -webkit-box-shadow: 0 1px 2px rgba(151, 151, 151, .58);
  box-shadow: 0 1px 2px rgba(151, 151, 151, .58);
}

其中 .card 与 .card() 是等价的。 建议,为了避免代码混淆,应写成 :

.card(){
  //something...
}

#wrap{
  .card();
}

要点:

  • 与 # 皆可作为 方法前缀。
  • 方法后写不写 () 看个人习惯。

4.3 默认参数方法

  • Less 可以使用默认参数,如果没有传参数,那么将使用默认参数。

  • @arguments 犹如 JS 中的 arguments 指代的是全部参数。

  • 传的参数中必须带着单位。

/* Less */
.border(@a:10px,@b:50px,@c:30px,@color:#000){
    border:solid 1px @color;
    box-shadow: @arguments;//指代的是 全部参数

}

#main{
    .border(0px,5px,30px,red);//必须带着单位
}

#wrap{
    .border(0px);
}

#content{
  .border;//等价于 .border()
}

/* 生成的 CSS */

#main{
    border:solid 1px red;
    box-shadow:0px,5px,30px,red;
}

#wrap{
    border:solid 1px #000;
    box-shadow: 0px 50px 30px #000;
}

#content{
    border:solid 1px #000;
    box-shadow: 10px 50px 30px #000;
}

4.4 方法的匹配模式

与面向对象中的多态很相似

/* Less */
.triangle(top,@width:20px,@color:#000){
    border-color:transparent  transparent @color transparent ;
}

.triangle(right,@width:20px,@color:#000){
    border-color:transparent @color transparent  transparent ;
}

.triangle(bottom,@width:20px,@color:#000){
    border-color:@color transparent  transparent  transparent ;
}

.triangle(left,@width:20px,@color:#000){
    border-color:transparent  transparent  transparent @color;
}

.triangle(@_,@width:20px,@color:#000){
    border-style: solid;
    border-width: @width;
    }

#main{
    .triangle(left, 50px, #999)
}

/* 生成的 CSS */
#main{
  border-color:transparent  transparent  transparent #999;
  border-style: solid;
  border-width: 50px;
}

要点:

  • 第一个参数 left 要会找到方法中匹配程度最高的,如果匹配程度相同,将全部选择,并存在着样 式覆盖替换。
  • 如果匹配的参数 是变量,则将会匹配,如 @_ 。

4.5 方法的命名空间

让方法更加规范

/* Less */
#card(){
    background: #723232;
    .d(@w:300px){
        width: @w;
        
        #a(@h:300px){
            height: @h;//可以使用上一层传进来的方法

       }
   }
}

#wrap{
    #card > .d > #a(100px); // 父元素不能加 括号
}

#main{
    #card .d();
}

#con{
    //不得单独使用命名空间的方法
    //.d() 如果前面没有引入命名空间 #card ,将会报错

    
    #card; // 等价于 #card();
    .d(20px); //必须先引入 #card

}

/* 生成的 CSS */
#wrap{
  height:100px;
}

#main{
  width:300px;
}

#con{
  width:20px;
}

要点:

  • 在 CSS 中 > 选择器,选择的是 儿子元素,就是 必须与父元素 有直接血源的元素。
  • 在引入命令空间时,如使用 > 选择器,父元素不能加 括号。
  • 不得单独使用命名空间的方法 必须先引入命名空间,才能使用 其中方法。
  • 子方法 可以使用上一层传进来的方法

4.6 方法的条件筛选

Less 没有 if else,可是它有 when

/* Less */
#card{
    
    // and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行
    .border(@width,@color,@style) when (@width>100px) and(@color=#999){
        border:@style @color @width;
   }
    // not 运算符,相当于 非运算 !,条件为 不符合才会执行
    .background(@color) when not (@color>=#222){
        background:@color;
   }
   
    // , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行
    .font(@size:20px) when (@size>50px) , (@size<100px){
        font-size: @size;
   }
}

#main{
    #card>.border(200px,#999,solid);
    #card .background(#111);
    #card > .font(40px);
}

/* 生成后的 CSS */
#main{
  border:solid #999 200px;
  background:#111;
  font-size:40px;
}

要点:

  • 比较运算有: > >= = =< <。

  • = 代表的是等于

  • 除去关键字 true 以外的值都被视为 false:

4.7 数量不定的参数

如果你希望你的方法接受数量不定的参数,你可以使用... ,犹如 ES6 的扩展运算符。

/* Less */
.boxShadow(...){
    box-shadow: @arguments;
}

.textShadow(@a,...){
    text-shadow: @arguments;
}

#main{
    .boxShadow(1px,4px,30px,red);
    .textShadow(1px,4px,30px,red);
}

/* 生成后的 CSS */
#main{
  box-shadow: 1px 4px 30px red;
  text-shadow: 1px 4px 30px red;
}

4.8 方法使用important!

使用方法 非常简单,在方法名后 加上关键字即可。

/* Less */
.border{
    border: solid 1px red;
    margin: 50px;
}

#main{
    .border() !important;
}

/* 生成后的 CSS */
#main {
    border: solid 1px red !important;
    margin: 50px !important;
}

4.9 循环方法

​ Less 并没有提供 for 循环功能,但这也难不倒 聪明的程序员,使用递归去实现。 下面是官网中的 一个 Demo,模拟了生成栅格系统。

/* Less */
.generate-columns(4);

.generate-columns(@n, @i: 1) when (@i =< @n) {
  .column-@{i} {
    width: (@i * 100% / @n);
 }
  .generate-columns(@n, (@i + 1));
}

/* 生成后的 CSS */
.column-1 {
  width: 25%;
}

.column-2 {
  width: 50%;
}

.column-3 {
  width: 75%;
}

.column-4 {
  width: 100%;
}

4.10 属性拼接方法

+_ 代表的是 空格; + 代表的是 逗号。

  • 逗号
/* Less */
.boxShadow() {
    box-shadow+: inset 0 0 10px #555;
}

.main {
  .boxShadow();
  box-shadow+: 0 0 20px black;
}

/* 生成后的 CSS */
.main {
  box-shadow: inset 0 0 10px #555, 0 0 20px black;
}

  • 空格
/* Less */
.Animation() {
  transform+_: scale(2);
}

.main {
  .Animation();
  transform+_: rotate(15deg);
}

/* 生成的 CSS */
.main {
  transform: scale(2) rotate(15deg);
}

4.11 实战技巧

/* Less */
.average(@x, @y) {
  @average: ((@x + @y) / 2);
}

div {
  .average(16px, 50px); // 调用 方法
  padding: @average;    // 使用返回值

}

/* 生成的 CSS */
div {
  padding: 33px;
}

可以说 Less 是一门优雅编程语言。

4.12 总结

image-20230530163557475

5. 继承

5.1 学习目标

image-20230530171214706

5.2 extend关键字的使用

extend 是 Less 的一个伪类。它可继承所匹配声明中的全部样式。

/* Less */
.animation{
    transition: all .3s ease-out;
    .hide{
      transform:scale(0);
   }
}

#main{
    &:extend(.animation);
}

#con{
    &:extend(.animation .hide);
}

/* 生成后的 CSS */
.animation,#main{
  transition: all .3s ease-out;
}

.animation .hide , #con{
    transform:scale(0);
}

5.3 all全局搜索替换

使用选择器匹配到的全部声明。

/* Less */
#main{
  width: 200px;
}

#main {
  &:after {
    content:"Less is good!";
 }
}

#wrap:extend(#main all) {}

/* 生成的 CSS */
#main,#wrap{
  width: 200px;
}

#main:after, #wrap:after {
    content: "Less is good!";
}

5.4 减少代码的重复性

从表面 看来,extend 与 方法 最大的差别,就是 extend 是同个选择器共用同一个声明,而 方法 是使用 自己的声明,这无疑 增加了代码的重复性。

方法示例 与上面的 extend 进行对比:

/* Less */
.Method{
  width: 200px;
  &:after {
      content:"Less is good!";
 }
}

#main{
  .Method;
}

#wrap{
  .Method;
}

/* 生成的 CSS */
#main{
  width: 200px;
  &:after{
    content:"Less is good!";
 }  
}

#wrap{
  width: 200px;
  &:after{
    content:"Less is good!";
 }  
 }

5.5 继承使用要点

  1. 选择器和扩展之间 是允许有空格的:pre:hover :extend(div pre)。
  2. 可以有多个扩展: pre:hover:extend(div pre):extend(.bucket tr) - 注意这与 pre:hover:extend(div pre, .bucket tr)一样。
  3. 这是不可以的,扩展必须在最后 : pre:hover:extend(div pre).nth-child(odd)。
  4. 如果一个规则集包含多个选择器,所有选择器都可以使用extend关键字。

5.6 总结

image-20230530171554192

6. 导入

6.1 学习目标

image-20230530171632503

6.2 文件导入

导入 less 文件 可省略后缀。

import "main"; 
//等价于
import "main.less";

@import 的位置可随意放置。

#main{
  font-size:15px;
}
@import "style";
6.2.1 reference

Less 中 最强大的特性 使用 引入的 Less 文件,但不会编译它。

/* Less */
@import (reference) "bootstrap.less"; 
6.2.2 once

@import语句的默认行为。这表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解 析。

@import (once) "foo.less";
@import (once) "foo.less"; // this statement will be ignored
6.2.3 multiple

使用@import (multiple)允许导入多个同名文件。

/* Less */
// file: foo.less
.a {
  color: green;
}

// file: main.less
@import (multiple) "foo.less";
@import (multiple) "foo.less";

/* 生成后的 CSS */
.a {
  color: green;
}
.a {
  color: green;
}

6.3 总结

image-20230530172018277

7. 条件表达式

7.1 学习目标

image-20230530172101425

7.2 带条件的混合

  • 比 较 运 算 符:> , > = , = , = < , <

  • 格 式:w h e n ( )

// lightness()是检测亮度的函数,用%度量
.mixin(@a) when(lightness(@a) >= 50%) {
    background-color:black;
}
.mixin(@a) when(lightness(@a) < 50%) {
    background-color:white;
}
.mixin(@a) {
    color:@a;
}
.class1{
    .mixin(#ddd);
}
.class2{
    .mixin(#555);
}

// 编译输出
.class1{
    background-color:black;
    color:#ddd;
}
.class2{
    background-color:white;
    color:#555;
}

7.3 类型检测函数

  • 检 测 值 的 类 型

  • iscolor

  • isnumber

  • isstring

  • iskeyword

  • isurl

.mixin(@a: #fff; @b: 0) when(isnumber(@b)) {
  color: @a;
  font-size: @b;
}

.mixin(@a; @b: black) when(iscolor(@b)) {
  font-size: @a;
  color: @b;
}

7.4 单位检测函数

  • 检测一个值除了数字是否是一个特定的单位

  • ispixel

  • ispercentage

  • isem

  • isunit

.mixin(@a) when(ispixel(@a)) {
  width: @a;
}

.mixin(@a) when(ispercentage(@a)) {
  width: @a;
}

.class1 {
  .mixin(960px);
}

.class2 {
  .mixin(95%);
}

//编译输出
.class1 {
  width: 960px;
}

.class2 {
  width: 95%;
}

7.5 总结

image-20230530173004280

8. 函数

8.1 学习目标

image-20230530173042816

8.2 函数库

  • less中封装了非常多函数库,例如颜色定义、颜色操作、颜色混合、字符串处理等等。
  • 例如color():用于解析颜色,将代表颜色的字符串转换为颜色值。
body {
  color: color("#f60");
  background: color("red");
}

//编译输出
body {
  color: #ff6600;
  background: #ff0000;
}

  • 例如convert():将数字从一种类型(单位)转换为另一种类

  • 长度单位:m, cm, mm, in, pt, px, pc

  • 时间单位:s, ms

  • 角度单位:rad(弧度), deg(度), grad(梯度), tum(圆)

body {
  width: convert(20cm, px);
}

//编译输出
body {
  width: 755.90551181px;
}

8.3 总结

image-20230530173243276

标签:精通,入门,Less,color,width,main,border,CSS
From: https://www.cnblogs.com/hongkun2412972165/p/17443913.html

相关文章

  • BOSS战-入门综合练习1
    这里将前面的内容综合起来了,会有点难,不过你可以问老师同学,也能上网查资料。P1478P1618P1579P2089......
  • Java入门学习必备工具-OneNote笔记
    俗话说:“好记性不如烂笔头”,不得不说,这句话在大部分时候都是适用的。特别是刚入门学习java的小白们,记笔记是非常实用的学习方法也可直接观看视频学习如何使用笔记工具,b站上动力节点老杜最新Java17版教程,从零基础出发,讲解Java编程的基础知识和实践技巧,涵盖了Java编程的方方面面......
  • 活动回顾|阿里云 Serverless 技术实战与创新上海站回放&PPT下载
    5月27日“阿里云Serverless技术实战与创新”上海站圆满落幕。活动现场邀请了来自阿里云一线技术专家,分享当前Serverless趋势和落地实践过程中的挑战和机遇;带来数据库Serverless技术架构及应用实践;浅析云原生时代开发者需要的Serverless能力,为开发者日常应用,就业、提升......
  • Wallys/Qualcomm network chip/ipq9574/ipq9554/wireless connectivity solutions.
     QualcommWi-Fi7networkchipsolutionsIPQ9574andIPQ9554areadvancedwirelessconnectivitysolutionsdevelopedbyQualcommTechnologies.ThesechipsaredesignedtosupporttheWi-Fi7(802.11be)standard,whichofferssignificantimprovementsinspe......
  • UE4材质入门
    前言:在学习的过程中笔记是不可缺少的,匆匆看过一遍不记笔记和实操的话总会忘掉一些知识点或者是记的不牢固,所以我写了本系列文章,一方面是强迫自己认认真真的看完一章课程,另一方面记笔记加深一下自己的记忆以及思考。所以本系列文章是我学习过程中的笔记,思考,实操以及作业然后分享给......
  • 【2023 · CANN训练营第一季】昇腾AI入门课(PyTorch)之模型迁移
    昇腾AI入门课(PyTorch)之模型迁移将基于PyTorch的训练脚本迁移到昇腾AI处理器上进行训练,目前有以下3种方式:自动迁移(推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。自动迁移:训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会将脚本中的CUD......
  • 【2023 · CANN训练营第一季】昇腾AI入门课(PyTorch)之AI应用开发入门
    图片googlenet分类样例首先在华为云上购买一台弹性云服务器,远程登陆到服务器上。#修改HwHiAiUser的shell为bashvim/etc/passwd切换为HwHiAiUser用户su-HwHiAiUser下载sample样例库gitclonehttps://gitee.com/ascend/samples.git获取此应用中所需要的原始网络模型#进入模型......
  • 【网络基础】DNS 原理入门
    1  前言今天我们来看看DNS,DNS是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。2  DNS是什么?DNS(DomainNameSystem的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexc......
  • 【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)之模型迁移
    昇腾AI入门课(TensorFlow)之模型迁移将TensorFlow网络模型迁移到异腾Al处理器执行训练,主要有两种方式:自动迁移方式。通过迁移工具对原始脚本进行AST语法树扫描,可自动分析原生的TensorFlowAPI在异腾AI处理器上的支持度,并将原始的TensorFlowi训练脚本迁移成异腾Al处理器支持的脚本,对于......
  • Git入门指南:从新手到高手的完全指南
    Git是一种强大的分布式版本控制系统,广泛应用于软件开发中。它的使用不仅可以帮助开发团队更好地管理代码,还可以提高团队协作效率和代码质量。随着软件开发的不断发展,版本控制成为了程序员必备的一项技能。Git作为最流行的分布式版本控制系统,被广泛地应用于软件开发、数据分析、文......