css预处理器
用法
可以方便快捷编写样式,提前处理css
css预处理器最终会被工具编译成css
CSS不支持计算写法,因此可以通过预处理器来实现
css语法糖
又名:糖衣语法: 一种编写css更加方便的技术语言
是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。
使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。给复杂的编程语言包裹一层糖衣(易于开发者开发)。
常见的CSS预处理器
Sass 常用
Less 常用
Stylus
Sass中文网:https://www.sass.hk/docs/
由于三种CSS预处理器语法类似,目前掌握一种即可
css转换less/scss stylus https://www.sass.hk/css2sass/
Less
相当于css的进阶版,高级css
- Less是一个CSS预处理器, Less文件后缀是.less
- 扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力。
- 注意:浏览器不识别Less代码,目前阶段,网页要引入对应的CSS文件—link;
Less : 导入:@import “文件路径” ; (Less文件的话,可以省略后缀.less) - vscode插件:Easy Less—-作用:less文件保存自动生成css文件
正常编写less文件即可:1. 它完全支持css语法
2.还提供其他很多强大语法🔥🔥🔥
🌈单行注释 ————————-不会在css生成注释
语法:// 注释内容
快捷键:ctrl + /
🌈块注释
语法:/ 注释内容 / ——-会在css上生成注释
快捷键: shift + alt + A语法注释
Less强大语法🔥
Less运算
运算
加减乘直接书写计算表达式;<br /> 除法需要添加小括号()或 .<br />注意🌈:表达式存在多个单位,以第一个单位为准。<br />**&不生成后代选择器,表示当前选择器,通常配合伪类或伪元素使用**
// less是完全支持css语法的 // 提供许多强大的语法功能 // 文件引入的还是css文件,因为浏览器不能识别less文件; // less只是程序员自己开发使用的css预处理器(预处理语言); body { width: 40vw; height: 50px; // 运算 加减乘除 width: 400px + 500px; width: 400px - 200px; width: 200px * 2; // 除法 需要加 括号() height: (200px / 2); // 计算vw width: (100vw * 100 / 375); } // 嵌套:后代选择器;子代选择器;伪类或者伪元素 .a { > .b { color: yellow; .c { color: pink; .d { color: red; } } .f { color: green; } } } .a{ &::after{ color: black; &:hover{ color: pink; } } }
变量
例如: 把颜色提前存储到一个容器,设置属性值为这个容器名
变量:存储数据,方便使用和修改。
语法:
定义变量:@变量名: 值;
使用变量:CSS属性:@变量名;混合mixin
可以装一堆代码,看代码理解: ```html // less变量 @
@themColor: red; 可以指定页面主体颜色 @itemColor:blue;
// sass变量& div { color: red; background-color: pink; border: 5px solid @themColor; } // 🔥混合mixin .atCont() { display: flex;justify-content: space-between; align-items: center; } div {
> .box {
.atCont();
color:@themColor;
}
} // 🔥🔥🔥创建使用精灵图的混合 传参 变量 封装 js .sprites(@x,@y,@size) { background-image: url(http://md.zbztb.cn/uploads/205433780907/sprites.png); background-repeat: no-repeat; background-position: @x @y; background-size: @size; } div { .sprites(-200px,-90px,200px); color: red; } // 这种注释不会被css生成 / 这种注释会被css生成 /
生成对比:<br />![](http://md.zbztb.cn/uploads/205433780907/%E7%B2%BE%E7%81%B5%E5%9B%BE%E6%B7%B7%E5%90%88.png#crop=0&crop=0&crop=1&crop=1&id=L7rU2&originHeight=236&originWidth=782&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
<a name="9e3a140c"></a>
## b站案例:
示图:![](http://md.zbztb.cn/uploads/205433780907/1652286098231.png#crop=0&crop=0&crop=1&crop=1&id=MyqwQ&originHeight=519&originWidth=305&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
<a name="fa7a977a"></a>
### 注意点:
<a name="1499fca7"></a>
#### 导航--水平方向滚动滑轴
新增:overflow-x: auto; 水平方向溢出加滚动条<br /> white-space: nowrap; 不换行<br />方法1: 设置ul 标签为flex;<br />方法2: 设置li标签为行内块;<br />ul li 中元素设置为行内块时,相邻元素因为换行,页面显示为之间空格间隙:<br /> 解决方法:1.设置空格的父元素字体大小为0px;<br /> 2.单独设置要显示的文字 字体大小;<br />html代码
```html
<nav>
<ul class="nav-bili">
<li><a href="#">首页</a></li>
<li><a href="#">动画</a></li>
<li><a href="#">番剧</a></li>
<li><a href="#">国创</a></li>
<li><a href="#">音乐</a></li>
<li><a href="#">舞蹈</a></li>
.........多个li
</ul>
<div class="down">
<a class="iconfont general_pulldown_s "></a>
</div>
</nav>
CSS 设置ul标签 为flex
/* 导航 */
nav {
height: 37px;
/* background-color: skyblue; */
display: flex;
align-items: center;
}
.nav-bili {
height: 100%;
display: flex;
🎃overflow-x: auto;
flex: 1;
}
.nav-bili li {
/* flex: 1; */
display: flex;
/* justify-content: center; */
💥加padding来撑大li💥
padding: 0 16px;
align-items: center;
}
.nav-bili a {
font-size: 14px;
color: #333333;
/* 继承,a标签中的字体颜色继承父元素
可以写在初始化a 中 */
/* color:inherit; */
🎃white-space: nowrap;
}
nav .down {
width: 40px;
text-align: center;
line-height: 37px;
}
nav .down .general_pulldown_s {
font-size: 20px;
color:#ccc;
}
.nav-bili li:hover {
border-bottom: 1px solid #FB7299;
}
.nav-bili li:hover a{
color: #FB7299;
}
播放列表:
新属性:1. gap:10px; 不用再换行
设置子项宽度,流出中间空隙 calc(50% - 5px);
<ul class="items"> <li> <a href="#" class="item"> <div class="pic"> <img src="./images/1.jpg" alt=""> </div> <div class="title"> 打破次元壁!蜡笔小新家的爆款拉面 现实中真的会好吃吗?? </div> </a> <div class="bottom"> <div class="play"> <div class="iconfont icon_shipin_bofangshu"></div> <div>36.9万</div> </div> <div class="words"> <div class="iconfont icon_shipin_danmushu"></div> <div>4545</div> </div> </div> </li>
.content { margin-top: 82px; padding: 0 10px; display: flex; justify-content: center; } .content .items { display: flex; justify-content: space-between; flex-wrap: wrap; 🎃/* 设置flex一行中盒子之间的间隔10px 不能换行*/ /* gap: 10px; */ } .content .items li { 🎃/* 利用calc运算 计算间隔 */ width: calc(50% - 5px); position: relative; margin-top: 10px; } .content .items .title { font-size: 12px; color: #333333; } .content .item .pic img{ width: 100%; /* height: 97px; */ } .content li .bottom { position: absolute; width: 100%; height: 18px; padding: 0 3px; background-image: linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.8)); bottom: 35px; left: 0; display: flex; justify-content: space-between; align-items: center; } .content .items li .play, .content .items li .words { display: flex; align-items: flex-end; color: #fff; font-size: 12px; } .icon_shipin_bofangshu, .icon_shipin_danmushu { font-size: 12px; margin-right: 3px; }
渐变
小测:
页面导入样式时,使用link和@import有什么区别? ```javascript
- link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
- 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
- import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
- link支持使用js控制DOM去改变样式,而@import不支持; ``` Label的作用是什么?是怎么用的?
- label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
<label for="Name">Number:</label>
<input type="text" name="Name" id="Name"/>
<label>Date:<input type="text" name="B"/></label>
输入框焦点
代码理解:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
/>
<title>label input.html</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
</style>
</head>
<body>
<form action="">
<!-- label 的for 和 input的id 一致 -->
<label for="username">点击我 输入框也会获得焦点哦</label>
<input type="text" id="username">
</form>
</body>
</html>