CSS—属性继承与预处理器:2分钟掌握预处理器

个人博客:haichenyi.com。感谢关注

1. 目录

  • 1–目录
  • 2–属性继承
  • 3–预处理器

2. 属性继承

  像Android里面继承extends,类继承,子类可以使用父类的public和protected的属性和方法。子类可以直接用。
  在CSS里面也是类似的。CSS里面是布局里面的东西继承。举个栗子:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS—属性继承</title>
    <style>
        .parent {
             /* 父div设置字体和颜色 */
            font-size: 22px;
            color: aqua;

            .childDiv {}

            .childP {}
        }
    </style>
</head>

<body>

    <div class="parent">
        <div class="childDiv">
            这是子div标签
        </div>
        <p class="childP">这是子p标签</p>
    </div>
</body>

</html>

属性继承
  看上面这个图,我给parent的样式class设置了字体和颜色,为什么内部子view的字体和颜色也发生了改变呢?我明明没有给内部子view设置样式。
  这就是继承,子view的部分属性可以从父view继承过来,不需要单独再去设置。那么,哪些属性可以继承,哪些属性不能继承呢?
  回忆一下,项目里面,给父view设置的属性,子view不需要设置,也会有相同的属性的。这些属性就是可以被继承的。比方说(说不全,只能说常用的):

  1. 字体系列的属性:font-size,font-style,font-weight等等
  2. 文本系列的属性:color,text-align,text-transform等等
  3. 其他属性:visibility,
      不可继承的属性
  4. 布局相关属性:display,float,box-sizing,left,top,right,bottom,position,z-index等等
  5. 尺寸相关属性:width,height,以及他们的min和max
  6. 边框相关属性:所有border属性,background属性等等
  7. 其他属性:margin,padding等等

3. 预处理器

概念: 预处理器是一种在CSS文件生成之前对代码进行预编译的工具,它允许开发者在CSS中使用变量、嵌套规则、函数和模块化等功能。这些功能使得CSS代码更加简洁、模块化和易于维护。
a. 是一种预编译的工具,在css文件生成之前
b. 在开发的时候可以使用变量,嵌套规则,函数等等
c. 使CSS代码更加简洁,模块化,易于维护
**种类:**常用的预处理器scss,Sass,Less,Stylus。我们项目里面使用的是scss,我这里就以scss为例:

变量

  比方说,你如果项目里面一个页面,有很多位置使用#666666

.style1{
            color: #666666;
            ....其他属性
        }
.style2{
            color: #666666;
            ....其他属性
        }
.style3{
            color: #666666;
            ....其他属性
        }
        ....

  假如有100个样式,都需要这个颜色,你写100遍。现在需求改了,让你把这个页面的颜色,全部改成红色。你怎么办?你要改100遍吗?1000遍呢?10000遍呢?
  在SCSS中,可以使用变量来存储颜色、字体、尺寸等重复使用的值。这样,当需要更改这些值时,只需在变量定义处修改一次,即可影响所有引用该变量的地方。这个时候,你如果使用scss,你可以这样写

$primary-color: #666666;
.style1{
            color: $primary-color;
            ....其他属性
        }
.style2{
            color: $primary-color;
            ....其他属性
        }
.style3{
            color: $primary-color;
            ....其他属性
        }
        ....

  你先定义一个变量$primary-color,用的位置,直接引用这个变量就行了。后续要改动,那就只用改变量的位置改成你想要的颜色就行了。

嵌套

  上面这个是变量的例子。下面再说一个嵌套规则的例子:一个页面有两个子view,两个子view又分别有各自的子孙view,他们样式都不一样。

<div class="A">
        <div class="a1">
            <div class="a4"></div>
        </div>
        <div class="a2">
            <div class="a5"></div>
        </div>
        <div class="a3">
            <div class="a6"></div>
        </div>
    </div>
    <div class="B">
        <div class="b1"></div>
        <div class="b2"></div>
        <div class="b3"></div>
    </div>

  上面这个布局。如果是按照CSS去写样式所有的样式都要平铺开,压根就不知道谁是谁,如果不看布局的话

.A{
...
}
.a1{
...
}
.a2{
...
}
...
.B{
...
}
.b1{
...
}

  SCSS允许在一个选择器内部嵌套另一个选择器,以表示它们之间的层级关系。这使得代码更加直观和易于维护。如果使用scss去写样式:

.A{
	.a1{
		.a4{
		}
	}
	.a2{
		.a5{
		}
	}
	.a3{
		.a6{
		}
	}
}
.B{
	.b1{
	}
	.b2{
	}
	.b3{
	}
}

  看到了吧?他们的样式放的位置都有一定的规律,A,B他俩是平级的,a1,a2,a3是平级的,他们属于A样式所在的元素的子元素的样式。a4又是a1的子样式。就是一层一层的嵌套。这样看就一目了然。改也方便。

混合

  我就不举老写法的例子了。Mixins允许你定义可重用的代码块,类似于函数。它们可以包含一组CSS属性和规则,并通过@include指令在其他选择器中复用。

@mixin border-radius($radius) {
  border-radius: $radius;
}
 
.button {
  @include border-radius(5px);
  background-color: $primary-color;
  color: white;
  padding: 10px 20px;
}

继承(Extend)

  使用@extend指令可以让一个选择器继承另一个选择器的样式。这有助于减少重复代码,并使样式表更加简洁。

.base-button {
  padding: 8px 16px;
  border: none;
  cursor: pointer;
}

.primary-button {
  @extend .base-button;
  background-color: $primary-color;
  color: white;
}

.secondary-button {
  @extend .base-button;
  background-color: #6c757d;
  color: white;
}

  还有for循环,我没有写,我感觉我们之所以用这个,就是为了简单,方便维护。我感觉for循环用起来,你自己当时知道是啥意思,过一段时间,你可能都忘记了。改也不好改。上面那几种用的都比较多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 4 部分

附件下载 联系工作人员获取附件 在 OpticStudio 中使用 RCWA 工具为增强现实&#xff08;AR&#xff09;系统设置出瞳扩展器&#xff08;EPE&#xff09;的示例中&#xff0c;首先解释了k空间中光栅的规划&#xff0c;并详细讨论了设置每个光栅的步骤。 介绍 本文是该四篇文…

【数据结构】堆和priority_queue

堆的定义 堆是什么&#xff1f;实际上堆是一种特殊的&#xff08;受限制的&#xff09;完全二叉树&#xff0c;它在完全二叉树的基础上要求每一个节点都要大于等于或者小于等于它的子树的所有节点。这个大于小于体现在节点的值或者权重。 如图所示&#xff1a; 根节点大于等于…

大语言模型学习--本地部署DeepSeek

本地部署一个DeepSeek大语言模型 研究学习一下。 本地快速部署大模型的一个工具 先根据操作系统版本下载Ollama客户端 1.Ollama安装 ollama是一个开源的大型语言模型&#xff08;LLM&#xff09;本地化部署与管理工具&#xff0c;旨在简化在本地计算机上运行和管理大语言模型…

1.Big-endian/ little endian大端对齐、小端对齐

一、大端模式、小端模式的介绍 Little endian&#xff1a;是低位字节排放在内存的低地址端、高位字节排放在内存的高地址端。 Big-endian&#xff1a;是高位字节排放在内存的低地址端、低位字节排放在内存的高地址端。 西门子是大端模式&#xff0c;因为比如 MW100 MB100(高位…

基于Python的PDF特殊字体提取器开发实践

基于Python的PDF特殊字体提取器开发实践 一、应用背景与功能概述 在PDF文档处理场景中&#xff0c;我们常常需要针对特定格式的文本内容进行提取分析。本文介绍的"PDF特殊字体提取器"是一款基于Python开发的桌面应用程序&#xff0c;主要解决以下业务需求&#xff…

【基础4】插入排序

核心思想 插入排序是一种基于元素比较的原地排序算法&#xff0c;其核心思想是将数组分为“已排序”和“未排序”两部分&#xff0c;逐个将未排序元素插入到已排序部分的正确位置。 例如扑克牌在理牌的时候&#xff0c;一般会将大小王、2、A、花牌等按大小顺序插入到左边&…

搭建laravle 数字产品销售平台 php

一个专为单一供应商设计的数字市场平台&#xff0c;旨在为销售数字产品和服务提供一站式解决方案。无论是软件、电子书、音乐、视频还是其他类型的数字内容&#xff0c;都能帮助商家高效地管理和销售他们的数字商品。 主要特点 单一供应商模式&#xff1a;专注于单一品牌或供应…

flink集成tidb cdc

Flink TiDB CDC 详解 1. TiDB CDC 简介 1.1 TiDB CDC 的核心概念 TiDB CDC 是 TiDB 提供的变更数据捕获工具&#xff0c;能够实时捕获 TiDB 集群中的数据变更&#xff08;如 INSERT、UPDATE、DELETE 操作&#xff09;&#xff0c;并将这些变更以事件流的形式输出。TiDB CDC 的…

大模型——打造自己的AI搜索引擎

大模型系列——打造自己的AI搜索引擎 你可能听说过 Perplexity,这是一个引起轰动的 AI 搜索引擎,但它是收费的。本文介绍使用开源 AI工具创建本地 Perplexity 的替代方案。 你可能听说过 Perplexity,这是一个引起轰动的 AI 搜索引擎。与传统搜索相比,它提供简洁、综合的查…

五、并发爬虫

本节聚焦于使用协程、线程、进程实现并发爬虫任务。 Python 线程受全局解释器锁&#xff08;GIL&#xff09;制约&#xff0c;同一时刻仅能执行一个线程&#xff0c;无法充分利用多核 CPU 优势&#xff0c;且频繁切换线程会增加开销&#xff0c;影响爬虫性能。 协程是轻量级线程…

Avalonia 中文乱码

代码字体文件设置成支持中文的&#xff0c;但是编译的代码还是显示的乱码&#xff0c;原因是代码文件的文件编码格式不支持中文导致的。 如下面的2个页面一部分中文显示正常&#xff0c;一部分显示正常&#xff0c;一部分显示乱码。

Verilog学习方法—基础入门篇(一)

前言&#xff1a; 在FPGA开发中&#xff0c;Verilog HDL&#xff08;硬件描述语言&#xff09;是工程师必须掌握的一项基础技能。它不仅用于描述数字电路&#xff0c;还广泛应用于FPGA的逻辑设计与验证。对于初学者来说&#xff0c;掌握Verilog的核心概念和基本语法&#xff0…

PCB电路板基础知识与应用详解:结构与工作原理

电路板&#xff0c;简称PCB&#xff08;Printed Circuit Board&#xff09;&#xff0c;是电子设备的核心部分&#xff0c;几乎所有现代电子产品都离不开电路板的支撑。本文将带您全面了解电路板的基本结构、工作原理及其在电子工程中的重要作用。 什么是电路板&#xff1f; 电…

使用Qt调用HslCommunication(C++调用C#库)

使用C/CLI 来调用C#的dll 任务分解&#xff1a; 1、实现C#封装一个调用hsl的dll&#xff1b; 2、实现C控制台调用C#的dll库&#xff1b; 3、把调用C#的dll用C再封装为一个dll&#xff1b; 4、最后再用Qt调用c的dll&#xff1b; 填坑&#xff1a; 1、开发时VS需要安装CLI项目库…

标签的ref属性 vue中为什么不用id标记标签

标签的ref属性 vue中为什么不用id标记标签 假设有一对父子组件&#xff0c;如果父组件和子组件中存在id相同的标签&#xff0c;会产生冲突。通过id获取标签会获取到先加载那个标签。 标签的ref属性的用法 在父组件App中&#xff0c;引入了子组件Person。 并使用ref标记了Pe…

嵌入式硬件发展历程

微型计算机架构&#xff1a;CPURAM存储设备 以前常把CPU称为MPU,但现在随着发展&#xff0c;分为两条道路&#xff1a; 一、发展历程 1、集成 然后把CPURAMFlash其他模块集成在一起&#xff0c;就称为MCU也称单片机&#xff0c;他们Flash和RAM比较小&#xff0c;运行裸机程…

Java进阶:Zookeeper相关笔记

概要总结&#xff1a; ●Zookeeper是一个开源的分布式协调服务&#xff0c;需要下载并部署在服务器上(使用cmd启动&#xff0c;windows与linux都可用)。 ●zookeeper一般用来实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。 ●有多台服…

Java spring客户端操作Redis

目录 一、创建项目引入依赖 二、controller层编写 &#xff08;1&#xff09;String类型相关操作测试&#xff1a; &#xff08;2&#xff09;List类型相关操作测试&#xff1a; &#xff08;3&#xff09;Set类型相关操作测试&#xff1a; &#xff08;4&#xff09;Has…

TMS320F28P550SJ9学习笔记1:CCS导入工程以及测试连接单片机仿真器

学习记录如何用 CCS导入工程以及测试连接单片机仿真器 以下为我的CCS 以及驱动库C2000ware 的版本 CCS版本&#xff1a; Code Composer Studio 12.8.1 C2000ware &#xff1a;C2000Ware_5_04_00_00 目录 CCS导入工程&#xff1a; 创建工程&#xff1a; 添加工程&#xff1a; C…

【Java学习】String类变量

面向对象系列七 一、String类似复刻变量 1.似复刻变量 1.1结构 1.2常量池检查 1.3构造方法 1.4""形式 1.5引用 2、字符数组 2.1不可变性 2.2常创性 二、String类变量里的方法 1.获取 1.1引用获取&#xff1a; 1.2字符获取&#xff1a; 1.3数组获取 1.…