Sass常用方案及Sass实现文字两侧横线
- 1.Sass实现文字两侧横线
- 2.`用Sass简化`媒体查询
- 3.使用继承+占位符实现样式复用
- 4.Sass 模块化
- 5.lighten 和 darken
自我记录
1.Sass实现文字两侧横线
@mixin
的基本作用:
- 代码复用:把常用的样式封装在一起,不需要重复写相同的代码。
- 参数化:可以通过参数动态生成样式,提高灵活性。
- 逻辑处理:结合 Sass 的控制语句(如 @if、@for),可以实现条件逻辑的样式生成。
// 抽离公共样式
@mixin before-after-common-line($width: 40rpx) {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
width: $width;
height: 1rpx;
background: #333333;
@content;
}
.test{
position: relative;
&::before {
@include before-after-common-line {
left: -64rpx;
}
}
&::after {
@include before-after-common-line(40rpx) {
right: -64rpx;
}
}
}
简单记录一下sass的基础复用
2.用Sass简化
媒体查询
// 用Sass的混合实现媒体查询
$breakpoints: (
phone:(320px, 480px),
pad:(481px, 768px),
notebook:(769px, 1024px),
desktop:(1025px, 1200px),
tv:1201px
);
@mixin responseTo($d_name) {
$bp: map-get($breakpoints, $d_name);
@if type-of($bp)=='list' {
@media (min-width:nth($bp, 1)) and (max-width:nth($bp, 2)) {
@content;
}
}
@else {
@media (min-width:$bp) {
@content;
}
}
}
使用
.nav {
@include responseTo('phone') {
width: 100px;
}
@include responseTo('pad') {
width: 200px;
}
}
3.使用继承+占位符实现样式复用
@mixin
混合注入 会冗余代码
@extend
继承 会去直接继承父类
@extend
配合%
占位符使用更完美
//完美继承 使用%占位符去除无用类代码
%tip {
font-size: 28px;
opacity: 0.8;
text-decoration: underline;
}
.tip-msg {
@extend %tip;
color: #666;
}
.tip-waring {
@extend %tip;
color: orange;
}
.tip-error {
@extend %tip;
color: red;
}
.tip-success {
@extend %tip;
color: green;
}
普通继承
// 普通继承 会冗余 .tip 代码
.tip {
font-size: 28px;
opacity: 0.8;
text-decoration: underline;
}
.tip-msg {
@extend .tip;
color: #666;
}
.tip-waring {
@extend .tip;
color: orange;
}
.tip-error {
@extend .tip;
color: red;
}
.tip-success {
@extend .tip;
color: green;
}
// 混合注入样式 会冗余代码
@mixin tips-mixin {
font-size: 28px;
opacity: 0.8;
text-decoration: underline;
}
.tip-msg-include {
@include tips-mixin;
color: #666;
}
.tip-waring-include {
@include tips-mixin;
color: orange;
}
.tip-error-include {
@include tips-mixin;
color: red;
}
.tip-success-include {
@include tips-mixin;
color: green;
}
4.Sass 模块化
@import 运行时 与css一样
@import 编译时 直接把编译结果生成sass不建议用作编译时态
问题如下三点
- 混淆: 需要区分是运行时还是编译时状态
- 污染: 变量冲突
- 私有: 只要在文件写了就全部暴露出去了,不像js需要导出
@use
- 命名空间 就是文件名字
as * | xx
就是别名- 私有性
_
开头$_color
// @import url('xxxx.scss'); // 运行时
// @import './xxxx.scss';// 编译时
// @use '../../../common.scss';// 命名空间 就是文件名字
// @use './common.scss';// 命名空间 就是文件名字
// @use './abc.scss';// 命名空间 就是文件名字
// .test {
// color: common.$color;
// }
// .test1 {
// color: abc.$color;
// }
@use './common.scss' as *;// 命名空间 别名
@use './abc.scss' as b;// 命名空间 别名
.test {
color: $color;
}
.test1 {
color: b.$color;
}
// 私有性 加_就可以
5.lighten 和 darken
lighten 使颜色变浅
color:lighten($color: #000000, $amount: 0);
- 第一个是颜色
- 第二个是变浅多少
darken 使颜色变深color:darken($color: #000000, $amount: 0);
- 第一个是颜色
- 第二个是变深多少
// @use 'sass:color';
body {
display: flex;
justify-content: space-around;
align-items: center;
}
.btn {
border: none;
outline: none;
line-height: 1;
white-space: nowrap;
cursor: pointer;
text-align: center;
transition: 0.1s;
width: 100px;
height: 40px;
border-radius: 10px;
margin: 0 auto;
}
$btnColors: #409eff, #67c23a, #e6a23c, #f56c6c, #6c6d71;
@for $i from 1 through length($btnColors) {
.btn.type-#{$i} {
$bg: nth($btnColors, $i);
$color: #fff;
background-color: $bg;
color: $color;
&:hover {
background-color: lighten($bg, 10%);
}
&:active {
background-color: darken($bg, 10%);
}
&:disabled {
background-color: lighten($bg, 20%);
color: lighten($color, 40%);
cursor: not-allowed;
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>按钮颜色</title>
<link rel="stylesheet" href="./index.css"></link>
</head>
<body>
<button disabled class="btn type-1">按钮</button>
<button class="btn type-2">按钮</button>
<button class="btn type-3">按钮</button>
<button class="btn type-4">按钮</button>
<button class="btn type-5">按钮</button>
</body>
</html>