css的思考

server/2024/10/18 18:42:27/

css_0">CSS思考[vue react tailwindcss]

css_1">传统css

  • 全局作用域: 一旦生效,应用于全局,造成各种各样的冲突,为了避免冲突,会写复杂的id选择器和类选择器
  • 依赖问题:引入多个css样式文件,引入的css文件会对后面的css文件造成影响
  • 打破隔离: 一旦涉及到一组样式,但是又有新的样式产生,可能会对原有的样式产生影响

解决方法

vue

在vue中,使用了scope css的方式来保证样式的唯一性,标签上不重复的生成data属性表示唯一性,编译后的css上也会生成这个选择器

react

css in js不是本身有的,是外部提供的

css_in_js_10">css in js

使用JavaScript作为语言以声明和可维护的方式描述样式。 它是一个高性能的JS到CSS编译器,它在运行时和服务器端工作。
扩展内联样式限制:支持所有的css原生功能
范围界定:唯一的选择器类名自动确定当前的 class 作用域,选择器之间无冲突
自动添加前缀:CSS 规则可以控制​自动添加前缀
代码共享:轻松地在 JS 和 CSS 之间共享常量和函数,灵活方便操作控制
轻量页面样式:只生成页面上当前 DOM 树会用到的样式

  • css in js中,hash会用于u企鹅人一段style是否插入,计算hash的方法就是将一段完整的css转换为hash。编写代码写的不是i最终的css,每次都需要重新序列化得到css然后再次计算hash,为渲染组件带来了额外的开销。
css_18">react中编写css的几种方法
  1. 使用className
  2. 内联样式 {{color: “red”}}
  3. css-loader(css-module)
	import styles from './App.css'const App = props => {return (<div className={style.app}>123</div><div className={style['form-item']}>456</div>)
  1. css-in-js
import { css, jsx } from '@emotion/core'
const color = 'white'
const App = props => {return (<divclassName={css`padding: 32px;background-color: hotpink;font-size: 24px;border-radius: 4px;`}>This is test.</div>)
}
emotion
import React from 'react';
import { css } from 'emotion'const color = 'white'function App() {return (<div className={css`padding: 32px;background-color: hotpink;font-size: 24px;border-radius: 4px;&:hover {color: ${color};}`}>This is emotion test</div>);
}export default App;
<html lang="en"><head><title>React App</title><style data-emotion="css">.css-czz5zq {padding: 32px;background-color: hotpink;font-size: 24px;border-radius: 4px;}</style><style data-emotion="css">.css-czz5zq:hover {color: white;}</style></head><body><div id="root"><div class="css-czz5zq">This is React.js test</div></div></body>
</html>
  1. 将样式写模板字符串
  2. 根据模板字符串生成class名,然后写道组件的class中
  3. 将生成的class名称以及class内容放到script组件中,然后放到html的head中

css_100">postcss

postcss提供了一个解析器,能够将css转换为抽象语法树,能够为css提供额外的功能,利用postcss的功能,开发一些插件,处理css
组成css parser css节点数 source map生成器 生成节点树串
css => parse => plugin 1 => plugin 2 => ... => stringifier => new css
读取css文件,通过parser将css解析为抽象语法树,将抽象语法树传递给任意数量的插件处理,通过诸多插件进行数据处理,插件见传递的数据就是ast树,将处理完成的ast转换为字符串。
在这里插入图片描述

css_107">tailwindcss

存在jit(just in time),在编译过程中去扫描html文件,然后生成对应的样式。


http://www.ppmy.cn/server/132833.html

相关文章

关于静态局部变量(第二篇)

本次代码输出1~5的阶乘值 编写一个函数来进行连乘&#xff0c;再进行第一次调用的时候是由11&#xff0c;第二次再用的时候是以第1次乘用的结果再乘以2&#xff0c;所以我们要用到静态局部变量去调用上一次的结果。 代码如下: #include <stdio.h> int main() { int…

《Java程序员面试宝典》——(第三章节)

大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的&#xff0c;经历过多次面试&#xff0c;有满意的也有备受打击的。 多次面试经历以及近期的面试真题来个汇总分析&#xff0c;说明下如何去准备&#xff0c;去回答面试官…

C#学习笔记(三)

C#学习笔记&#xff08;三&#xff09; 第 二 章 命名空间和类、数据类型、变量和代码规范二、类的组成和使用分析1. 基本概念2. 类的内容组成3. 方法的初步理解 第 二 章 命名空间和类、数据类型、变量和代码规范 二、类的组成和使用分析 1. 基本概念 类是程序的基本单元&a…

大数据治理:构建新时代数据生态的关键

摘要 随着信息技术的飞速发展和数字化浪潮的席卷,大数据已成为当今社会的核心资源。如何有效治理大数据,不仅关系到数据资源的利用效率,还对隐私保护、网络安全和社会秩序产生深远影响。本文深入探讨了大数据治理的概念、面临的挑战以及治理框架的构建,从技术、法律和伦理等…

Redis JSON数据结构详解及Java实现

Redis不仅是一个高性能的键值存储数据库&#xff0c;还提供了丰富的数据结构支持&#xff0c;其中包括RedisJSON模块。RedisJSON允许用户以JSON格式存储和操作数据&#xff0c;使得Redis不仅适用于简单的键值对存储&#xff0c;还能处理复杂的嵌套数据结构。本文将介绍如何使用…

开源OpenStack

1.查询HCS基于OpenStack哪个版本开发 2.九大核心组件 OpenStack可以对接FC也可以对接KVM主机&#xff1b;&#xff08;OpenStack 对接华为FusionCompute&#xff0c;一个集群对应 openstack 一台计算主机&#xff09;-引申出nova compute 2.1nova nova两个核心组件nova contro…

滚雪球学Redis[7.3讲]:Redis在排行榜系统中的应用:高效构建与优化

全文目录&#xff1a; &#x1f389;前言&#x1f6a6;Redis排行榜的使用场景&#x1f342;典型使用场景 &#x1f4c8;使用Sorted Set实现排行榜&#x1f996;1. 添加或更新排行榜元素&#x1f432;2. 获取排行榜&#x1f409;3. 获取玩家排名&#x1f995;4. 删除元素 ⚙️动…

原理代码解读:基于DiT结构视频生成模型的ControlNet

Diffusion Models视频生成-博客汇总 前言:相比于基于UNet结构的视频生成模型,DiT结构的模型最大的劣势在于生态不够完善,配套的ControlNet、IP-Adapter等开源权重不多,导致难以落地。最近DiT-based 5B的ControlNet开源了,相比于传统的ControlNet有不少改进点,这篇博客将从…