styled-components 库的用法介绍和实践总结

news2024/12/14 19:17:04

styled-components 库的实践用法总结

前言

前段时间开发了一个 NiceTab 浏览器插件,并写了一篇介绍文章,新开发了一款浏览器Tab管理插件,OneTab 的升级替代品, 欢迎品尝!。

在插件中用到了 styled-components 这个库,于是做一个基本的介绍和分享。

在开发 NiceTab 插件时,只是一些粗浅的使用,整理完这篇使用笔记后,我准备优化一波了。

styled-components 库介绍

什么是 styled-components

styled-components 是一个流行的 CSS-in-JS 库, 它允许您在 JavaScript 中编写 CSS 样式,是 CSS-in-JS 方案中的一种实现方式。

styled-components is the result of wondering how we could enhance CSS for styling React component systems. By focusing on a single use case we managed to optimize the experience for developers as well as the output for end users.

  • 官方文档: 官方文档
  • Github: Github
为什么要使用 styled-components

我们看看官网介绍:

  • Automatic critical CSS - 自动关键CSS: 完全自动地跟踪页面上呈现的组件并注入它们的样式。结合代码分割,按需加载。
  • No class name bugs - 不存在类名冲突问题: 生成唯一的类名。不用担心类名重复、冲突、覆盖以及拼写错误等问题。
  • Easier deletion of CSS - 便于样式剔除: 传统的编写样式方式很难检测样式和类名是否被使用。而 styled-components 会与特定的组件关联,在工程化项目中,构建工具可以轻易的检测到样式组件是否被使用,未被使用的样式组件会被剔除,避免无用代码打包到构建产物中。
  • Simple dynamic styling - 易于编写动态样式: styled-components 样式组件可以根据 props 和全局主题来动态调整样式,无需手动管理众多样式类。
  • Painless maintenance - 便于维护: 不需要查找众多文件来排查组件样式,降低维护成本。
  • Automatic vendor prefixing - 自动添加厂商前缀: 您只需要编写标准的 CSS 样式,其他的事情 styled-components 自动帮您处理。

传统 CSS 方式的缺点

  • 缺乏作用域,全局样式污染,容易出现类名冲突,样式覆盖问题,出现问题难以排查。需要通过 namespace 命名空间、书写顺序、优先级等方式来缓解。
  • 原生 CSS 在没有 scssless 等预处理器的情况下,编写起来非常痛苦。
  • 实现动态样式,需要预先定义多个类名,为不同类目编写对应的样式,然后根据情况动态绑定不同的类名。

开发中感受

  • 编写一个功能组件,可能只需要添加少许样式 (现在的项目大多都会使用 UI 组件库,自带各种样式),为此而创建一个 css 文件不划算,还可能会有全局样式污染。只需要在该功能组件中定义一个 styled-components 样式组件即可。
  • 在 html 标签元素书写行内样式或者绑定 style 变量都难以定义伪类样式和复杂选择器(如::hover, :before, :after, :first-child&选择器, +选择器等等)
  • 如果编写的功能组件需要编写的样式比较多,可以抽取到一个 jsts 文件中,然后引入即可,因为 styled-components 定义的都是 js 对象。
  • 支持 scss 风格的语法。
  • 快速定位样式定义代码:传统的方式,需要全局搜索元素类名,才能定位到样式代码。而 js 方式的定义,编辑器能快速跳转定位。

styled-components 的缺点:

  • 生成的类名是一串 hash 值, 会绑定到对应的 dom 标签上,难以定位元素,建议给 styled-components 样式组件都添加一个 class 样式名,便于识别。
其他 css-in-js 方案

使用 css-in-js 方案的库,比较常见的还有 emotionjss, 大家可以自行尝试使用。

styled-components 的基本使用

安装
  • npm 安装:npm install styled-components
  • pnpm 安装:pnpm add styled-components
  • yarn 安装:yarn add styled-components

如果您使用像 yarn 这种支持 package.json 的 resolutions 字段的包管理器,强烈建议您向其中添加一个与主版本对应的入口配置。这有助于避免因项目中安装了多个版本的 styled-components 而引起的一系列问题。

基本用法

参考链接:getting-started

先上一个示例:

import styled from "styled-components";
// 创建一个 Title 样式组件,使用 <h1> 标签
const Title = styled.h1`
  font-size: 24px;
  text-align: center;
  color: #fff;
`;

// 创建一个 Wrapper 样式组件,使用 <section> 标签
const Wrapper = styled.section`
  padding: 30px;
  background: #000;
`;

// 在 jsx 中使用
export default function App() {
  return (
    <Wrapper>
      <Title>Hello World!</Title>
    </Wrapper>
  );
}

使用起来挺简单的,除了上面示例中的 h1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

M|林中小屋

title: 林中小屋 The Cabin in the Woods time: 2024-12-13 周五 rating: 7 豆瓣: 7.6 上映时间: “2012” 类型: M恐怖 导演: 德鲁戈达德 Drew Goddard 主演: 克里斯汀康奈利 Kristen Connolly弗兰克朗茨 Fran Kranz 国家/地区: 美国 片长/分钟: 95分钟 M&#xff5…

Mysql中的sql语句怎么执行的?

1.连接MySQL 通过客户端使用TCP&#xff08;数据传输协议&#xff09;连接MySQL连接器&#xff0c;连接器接到请求后对它进行检验是否有权限&#xff0c;有就进行分配资源。&#xff08;这个过程不能超过8小时&#xff09; 2.成功连接(校验效验) 客户端发送sql语句&#xff…

流网络复习笔记

所以这里的19是118-019 <s , w> 1/3就是容量是3&#xff0c;流量是1 残留网络就是两个相对箭头上都是剩余对应方向还能同行的流量 所以s->w 3-1 2, w->s 1

Redis - 实战之 全局 ID 生成器 RedisIdWorker

概述 定义&#xff1a;一种分布式系统下用来生成全局唯一 ID 的工具 特点 唯一性&#xff0c;满足优惠券需要唯一的 ID 标识用于核销高可用&#xff0c;随时能够生成正确的 ID高性能&#xff0c;生成 ID 的速度很快递增性&#xff0c;生成的 ID 是逐渐变大的&#xff0c;有利于…

arXiv-2024 | VLM-GroNav: 基于物理对齐映射视觉语言模型的户外环境机器人导航

作者&#xff1a; Mohamed Elnoor, Kasun Weerakoon, Gershom Seneviratne, Ruiqi Xian, Tianrui Guan, Mohamed Khalid M Jaffar, Vignesh Rajagopal, and Dinesh Manocha单位&#xff1a;马里兰大学学院公园分校原文链接&#xff1a;VLM-GroNav: Robot Navigation Using Phys…

华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)

华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理&#xff0c;我们需要统一把局域网内的所有AP上线到AC&#xff0c;由AC做集中式管理部署。这里我们需要理解CAPWAP协议&#xff0c;该协议分为两种报文&#xff1a;1、管理报文 2、数据报文。管理报文实际在抓包过程…

简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程

vue3若依框架前端打包部署到服务器&#xff0c;需要部署到多个服务器上&#xff0c;每次打包会很麻烦&#xff0c;今天教大家一个动态配置请求头api的方法&#xff0c;部署后能动态获取(修改)对应服务器的请求ip 介绍两种方法&#xff0c;如有需要可以直接尝试步骤一&#xff…

Java-DataX 插件机制示例

示例代码 DataXPluginExample: DataX 项目的plugin 机制学习https://gitee.com/wendgit/data-xplugin-example/ 摘要 DataXPluginExample 是一个我编写的专门解读DataX插件机制的示例项目&#xff0c;旨在深入解析和掌握DataX的插件机制。本示例通过简洁明了的实现方式&#…

基于AI网关的风电系统在线监测

风力发电是典型的清洁能源之一&#xff0c;也是我国能源结构转型的重要组成。近年来我国大力发展风能、水能、光伏等清洁能源&#xff0c;加快创造人与生态友好和谐的人居社会。由于风电机组通常部署于偏远的野外&#xff0c;经常面临狂风、暴雨、日晒等严苛工作形势&#xff0…

[Unity] Text文本首行缩进两个字符

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 比如&#xff1a; 效果&#xff1a; 代码&#xff1a; TMPtext1.text "\u3000\u3000" "选择动作类型&#xff1a;";

实时日志与发展:Elasticsearch 推出全新专用的 logsdb 索引模式

作者&#xff1a;来自 Elastic Mark Settle, George Kobar 及 Amena Siddiqi Elastic 最新发布的 logsdb 索引模式是专为日志管理优化的功能&#xff0c;旨在提升日志数据的存储效率、查询性能以及整体可用性。这个模式专注于满足现代日志处理需求&#xff0c;提供更高效的日志…

可视化报表如何制作?一文详解如何用报表工具开发可视化报表

在如今这个数据驱动的商业时代&#xff0c;众多企业正如火如荼地推进数字化转型&#xff0c;力求在激烈的市场竞争中占据先机。然而&#xff0c;随着业务规模的扩大和运营复杂度的提升&#xff0c;企业的数据量爆炸式增长&#xff0c;传统报表格式单一、信息呈现密集且不易解读…

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…

【EthIf-03】 EthernetInterface软件栈的文件组织结构

上图为《AUTOSAR_SWS_EthernetInterface【v2.2.0 】》给出的EthernetInterface软件栈的文件组织结构,本文主要关注arccore代码中已存在的文件的功能和作用,不知道的小伙伴可以查看🔗EthIf的文件结构中的src和inc目录下的文件有哪些: 1. 文件结构 1.1 EthIf_Cbk.h 头文…

Java基础知识(四) -- 面向对象(上)

1.概述 Java语言是一种面向对象的程序设计语言&#xff0c;而面向对象思想(OOP)是一种程序设计思想&#xff0c;在面向对象思想的指引下&#xff0c;使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物&#xff0c;每种事物都具备自己的属性和行为。 面向对象思…

国内Chrome浏览器下载安装教程,谷歌浏览器最新下载教程

今天主要讲解的是国内Chrome浏览器下载安装教程&#xff0c;谷歌浏览器最新下载教程&#xff0c;包括确认浏览器版本、ChromeDriver 驱动的下载&#xff0c;同理&#xff0c;这个教程同样适用于windows版本的&#xff0c;linux 版本的&#xff0c; mac 版本的。 众所周知&…

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

nVisual 定制化APP打包流程

一、下载打包软件 HBuilder X 下载地址&#xff1a;https://dcloud.io/hbuilderx.html 安装:此软件为绿色软件&#xff0c;解压即可使用。进入目录&#xff0c;双击exe启动。 此软件需要注册&#xff0c;打开时会提供跳转链接&#xff0c;通过邮箱注册账号。 注册成功后&#…

pytest -s执行的路径

pytest -s执行的路径&#xff1a; 直接写pytest -s&#xff0c;表示从当前路径下开始执行全部.py的文件。 执行具体指定文件&#xff1a;pytest -s .\testXdist\test_dandu.py 下面这样执行pytest -s 会报找不到文件或没权限访问&#xff0c; 必须要加上具体文件路径pytest -s…

Bootstrap-HTML(六)Bootstrap按钮

Bootstrap按钮与按钮组 前言一、Bootstrap按钮&#xff08;一&#xff09;、内置按钮样式&#xff08;二&#xff09;、按钮边框设置&#xff08;三&#xff09;、按钮尺寸调整&#xff08;四&#xff09;、块级按钮创建&#xff08;五&#xff09;、活动 / 禁用按钮设置 二、B…