sass @extend(继承)指令详解
在设计网页的时候常常遇到这种情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。
通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式。
普通CSS的实现
接下来以警告框为例进行讲,解4种类型
| 类型 | 说明 |
|---|---|
| info | 信息!请注意这个信息。 |
| success | 成功!很好地完成了提交。 |
| warning | 警告!请不要提交。 |
| danger | 错误!请进行一些更改。 |
所有警告框的基本样式(风格、字体大小、内边距、边框等...) ,因为我们通常会定义一个通用alert样式,类似于这样的
.alert{
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
然后定义不同警告框单独风格:
.alert-info{
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success{
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning{
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger{
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
然后这样使用:
<div class="alert alert-info">
信息!请注意这个信息。
</div>
<div class="alert alert-success">
成功!很好地完成了提交。
</div>
<div class="alert alert-warning">
警告!请不要提交。
</div>
<div class="alert alert-danger">
错误!请进行一些更改。
</div>
最后的效果:
指令详解\images\image-20220803090251819.png)
使用继承@extend进行改进
基本样式我们没有变,主要是各个警告框单独的样式
.alert-info{
@extend .alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success{
@extend .alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning{
@extend .alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger{
@extend .alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
这样编译后:
.alert, .alert-info, .alert-success, .alert-warning, .alert-danger { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; font-size: 12px; }
.alert-info { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; }
.alert-success { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; }
.alert-warning { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; }
.alert-danger { color: #a94442; background-color: #f2dede; border-color: #ebccd1; }
使用时就不须要再写基本类了
<div class="alert-info">
信息!请注意这个信息。
</div>
<div class="alert-success">
成功!很好地完成了提交。
</div>
<div class="alert-warning">
警告!请不要提交。
</div>
<div class="alert-danger">
错误!请进行一些更改。
</div>
使用多个@extend
.alert{
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.important{
font-weight: bold;
font-size: 14px;
}
.alert-danger{
@extend .alert;
@extend .important;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
@extend多层继承
上面的方式还可以写成
.alert{
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.important{
@extend .alert;
font-weight: bold;
font-size: 14px;
}
.alert-danger{
@extend .important;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
占位符
你可能发现被继承的css父类并没有被实际应用,也就是说html代码中没有使用该类,它的唯一目的就是扩展其他选择器。
对于该类,可能不希望被编译输出到最终的css文件中,它只会增加CSS文件的大小,永远不会被使用。
这就是占位符选择器的作用。
占位符选择器类似于类选择器,但是,它们不是以句点(.)开头,而是以百分号(%)开头。
当在Sass文件中使用占位符选择器时,它可以用于扩展其他选择器,但不会被编译成最终的CSS。
之前的代码进行改写:
%alert{
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.alert-info{
@extend %alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success{
@extend %alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning{
@extend %alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger{
@extend %alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
编译后:
.alert-info, .alert-success, .alert-warning, .alert-danger { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; font-size: 12px; }
.alert-info { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; }
.alert-success { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; }
.alert-warning { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; }
.alert-danger { color: #a94442; background-color: #f2dede; border-color: #ebccd1; }
从结果可以看到,没用alert类的样式生成,因为它根本没有用,所以此种情况用“占位符选择器”更合适
sass@extend指令的基本使用就是这些,对你有用的话,记得点赞哦~
sass @extend(继承)指令详解的更多相关文章
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
- nginx.conf中关于nginx-rtmp-module配置指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
- Nginx RTMP 模块 nginx-rtmp-module 指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
- set指令详解
set指令详解 功能说明:设置shell 语 法:set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...] 说 明:设置或取消设置shell选项 ...
- nginx-rtmp-module 指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解. Core rtmp 语法:rtmp { ... } 上下文:根 描述: ...
- [转]JVM指令详解(上)
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- C#中的预处理器指令详解
这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...
- rsync指令详解
rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...
- #pragma 预处理指令详解
源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma 预处理指令详解 在所有的预处理指令中, ...
- 迈向angularjs2系列(2):angular2指令详解
一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...
随机推荐
- 攻防世界 Mine- IDA静调或x64dbg动调 两种方式
刷攻防世界的最后一道二星题,记录一下,大佬请飘过 题目 分析过程 我很勇,我先双击看看这是什么 是一个扫雷游戏,第一下运气好没踩雷,发现无法继续输入了:如果运气不好,会输出"您踩雷啦!&qu ...
- 记录C++,读文件返回base64数据
读文件返回base64函数: void CZZUser::hidFileToBase(const char* filePath) { // 文件 转 base64 // 计算文件长度 unsigned ...
- 十城百校联动!HDC.Together 2023 HarmonyOS学生公开课与千余名校园学子见证鸿蒙力量
8月6日,HDC.Together2023 HarmonyOS学生公开课在东莞松山湖举办.有来自清华大学.北京大学.哈尔滨工业大学等全国百余所高校,千余名学生开发者齐聚会场,与华为高级技术专家.生 ...
- 直播预告丨 Hello HarmonyOS 进阶课程第五课——原子化服务
本周三<Hello HarmonyOS 系列应用篇:原子化服务>,HDE 李洋老师将带领大家了解 HarmonyOS 原子化服务的技术特性与创新性,对智能家居.智慧出行.运动健康.智慧办公 ...
- 全面支持JS/eTS应用开发,DevEco Studio 3.0 Beta4新版本发布
原文:https://mp.weixin.qq.com/s/j5Cl48ZxzEmnnpfoM0pKJg ,点击链接查看更多技术内容. HUAWEI DevEco Studio(后文简称DevEco ...
- k8s集群安装(kubeadm方式)
一.准备三台虚拟机,系统CentOS7.9: 192.168.1.221 master1 192.168.1.189 node1 192.168.1.60 node2 二..对三台虚拟机初始化 1 ...
- Effective Python:第2条 遵循PEP 8风格指南
PEP8文档:https://peps.python.org/pep-0008/ 与空白有关的建议: 用空格(space)表示缩进,而不要用制表符(tab). 和语法相关的每一层缩进都用4个空格表示. ...
- 链栈的实现 C语言/C++
堆栈的链式存储C/C++实现--链栈 与顺序栈相比,链栈的优点在于不存在栈满上溢的问题.链栈通常使用单链表实现,进栈.出栈操作就是在单链表表头的 插入.删除操作.用单链表实现链栈时,使用不带头结点的单 ...
- 万节点规模云服务的 SRE 能力建设
简介: 随着越来越多企业以容器作为系统底座,那么阿里云的云服务又是如何进行SRE规划呢?下文将由资深SRE工程师拆解2 万节点规模云服务背后的 SRE 能力建设,立即点击观看! 作者:宋傲(凡星) ...
- 云效Codeup代码评审中的代码协同
简介: 云效 Codeup 汇集了阿里巴巴最新的代码托管.代码协同技术,希望能够造福更多中国和世界的开发者. 大神说:"Show me the code",于是就有了代码评审. & ...