React styled-components (一) —— 基本使用

2023-11-18

https://github.com/styled-components/styled-components

styled-components 基本使用

介绍

styled-components 是一个针对 Reactcss in js 类库。

和所有同类型的类库一样,styled-components 通过 js 赋能解决了原生 css 所不具备的能力,比如变量、循环、函数等。解决了 css 全局命名空间,避免样式冲突的问题,维护起来更加方便。

优点

  • 贯彻 Reacteverything in JS 理念,降低 jscss 文件的依赖
  • 保留前端开发 CSS 书写习惯,无学习和迁移成本
  • 使用方便,不需要配置 webpack,开箱即用
  • 为样式生成唯一的类名,不用再担心样式命名的问题,移除样式与组件之间的对应关系
  • 样式可以使用变量,更加灵活
  • 组件的逻辑、生命周期、样式、结构完全和其它组件解耦,对组件维护很有帮助

缺点

可读性差,不方便直接看出组件的 html 元素。

安装

npm install styled-components 或
cnpm install styled-components 或
yarn add styled-components

安装完成之后,package.json

{
  "dependencies": {
    "antd": "^4.16.10",
    "axios": "^0.21.1",
    "less": "^4.1.1",
    "less-loader": "4.0.1",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router-dom": "^5.2.0",
    "react-scripts": "4.0.3",
    "styled-components": "5.3.9",
}

引入

import styled from "styled-components"

使用

基本用法

新建 Demo.js 文件:

import React, { Component } from 'react'
import styled from 'styled-components';
// Create a <Title> react component that renders an <h1> which is
// centered, palevioletred and sized at 1.5em
const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    background: orange;
    margin: 0 auto;
`
class Home extends Component {
  render () {
    return (
      <div>
        <ContextBox>
          <Title>Hello World, this is my first styled component!</Title>
        </ContextBox>
      </div>
    )
  }
}
export default Home

上面例子,styled.div 和 styled.h1 是一个函数,可以进行调用。

注意组件首字母必须大写不然无法识别。

App.js 中引入 Demo.js 文件:

// import logo from './assets/images/logo.svg';
import './assets/css/App.css';
import Demo from './components/Demo'

function App () {
  return (
    <div className="App">
      <header className="App-header">
        {/* <img src={logo} className="App-logo" alt="logo" /> */}
        <p>
          文字 <code>src/App.js</code> Hello World!.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          https://reactjs.org
        </a>
      </header>
      <Demo />
    </div>
  );
}

export default App;

页面效果:
在这里插入图片描述

styled-components 的本质是通过函数的调用,最终创建出一个组件:

  • 这个组件会被自动添加上一个不重复的 class
  • styled-components 会给该 class 添加相关的样式。

如下图:
在这里插入图片描述

样式嵌套

styled-components 还支持类似于less、scss等css预处理器一样的样式嵌套:

  • 支持直接子代选择器或后代选择器,并且 直接编写样式;
  • 可以通过&符号获取当前元素;
  • 直接伪类选择器、伪元素等。

修改 Demo.js 文件:

import React, { Component } from 'react'
import styled from 'styled-components';
// Create a <Title> react component that renders an <h1> which is
// centered, palevioletred and sized at 1.5em
const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
    background: orange;
    .banner {
      background: grey;  
      p {
        font-size: 24px;
        color: #fff;
        text-align: center;
        &::after {
          display: block;
          content: "hello world";
          font-size: 30px;
        }      
      }
      span {
        color:red;
        &.active {
          color: red;
        }
        &:hover {
          color: green;
        }
        &::after {
          content: 'aaa';
        }
      }  
    }
`
class Home extends Component {
  render () {
    return (
      <div>
        <ContextBox>
          <Title>Hello World, this is my first styled component!</Title>
          <div className='banner'>
            <p>This is p!</p>
            <span>11111111111</span>
            <span>22222222222</span>
            <span>33333333333</span>
          </div>
        </ContextBox>
      </div>
    )
  }
}
export default Home

页面效果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React styled-components (一) —— 基本使用 的相关文章

  • glint360k数据集的解压

    关于训练集的解压早就有人写了blog了 文章地址 https blog csdn net weixin 43408232 article details 109687884 但是对于它剩余的7个bin文件我很困惑 根据他们在官方的微博上声明
  • Verilog学习(3)initial,always,task,function,常见系统任务

    结构说明语句 Verilog中任何过程模块都属于以下四种结构的说明语句 initial说明语句 always 说明语句 task说明语句 function说明语句 一个程序模块可以有多个initial和always 过程块 每个initia
  • 常用的windows命令大全

    当我们熟练掌握windows命令时 可以通过输入命令来快速完成各种系统操作 非常的便捷 那么常用的windows命令有哪些呢 今天 小编就把命令介绍给大家 windows命令 1 gpedit msc 组策略 2 sndrec32 录音机
  • 12-JavaScript的正则表达式 DAY9 (04.20)

    1 正则表达式的定义 正则表达式是由一个字符序列形成的搜索模式 用来匹配 当在文本中搜索数据时 可以使用搜索模式来描述查询内容 其可以是一个简单的字符 或者一个更复杂的模式 2 正则表达式的创建 1 字面量 var reg1 abc g g
  • 论人工智能历史、现状与未来发展战略

    来源 学术前沿 作者 郭毅可 人工智能问世60多年来 承载着人类对自己的智慧的无限自信 在这样的自信下 人工智能发展到了今天 人们在追求机器从事尽可能多的智力劳动的路上走得很快 也很远 今天人工智能的发展 实际上标志着人类第三次认知革命 即
  • 理解cpp的重载,重写,重定义

    函数重载 overload 函数重载是指在一个类中声明多个名称相同但参数列表不同的函数 这些的参数可能个数或顺序 类型不同 但是不能靠返回类型来判断 特征是 1 相同的范围 在同一个作用域中 2 函数名字相同 3 参数不同 4 virtua

随机推荐

  • 死锁产生条件和解决办法

    死锁 死锁产生的四个条件 产生死锁必须同时满足以下四个条件 只要其中任一条件不成立 死锁就不会发生 互斥条件 线程要求对所分配的资源 如打印机 进行排他性控制 即在一段时间内某资源仅为一个线程所占有 此时若有其他线程请求该资源 则请求线程只
  • 城市污水管网监测系统解决方案

    一 方案概述 在经济快速发展和政府政策的推动下 以产业聚焦为核心的城市园区经济发展迅速 由于在城市园区企业 工厂在生产制造过程产生了大量的废水等其他污染物都是由污水管进行排放 一旦发生井下污水管网堵塞 会造成废水中的气体等其他有害物质的传播
  • LSTM预测大写数字的c++ 代码

    自己写的LSTM预测大写数字的c 代码 有较详细的注释 有不懂的可以交流 平台 vs2015 头文件 LstmCppH h pragma once include iostream include math h include stdlib
  • Mysql 数据库

    数据库基础 1 什么是数据库 用来存储数据 数据库可在硬盘及内存中存储数据 数据库与文件存储数据的区别 数据库本质也是通过文件来存储数据 数据库的概念就是系统的管理存储数据的文件 数据库介绍 本质就是存储数据的C S架构的socket套接字
  • 商务智能-第六章 数据挖掘

    Lecture6 Data Mining 1 数据挖掘 在数据库及数据仓库中存贮有大量的数据 它们具有规范的结构形式与可靠的来源 且数量大 保存期间长 是一种极为宝贵的数据资源 充分开发 利用这些数据资源是目前计算机界的一项重要工作 1 1
  • netty handler的执行顺序(3)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天解决2个问题 1 handler在pipeline当中究竟是如何存储的 2 在遍历handler的过程中 会根据event的不同 调用不同的handler 这一点是如何
  • Fresco使用

    fresco简单使用 先上文档地址 github https github com facebook fresco 文档 https frescolib org docs index html 从在github上最好点击英文文档 中文的版本
  • 一文学会使用GCeasy——一款超好用的在线分析GC日志的网站

    https blog csdn net CoderBruis article details 101234738
  • #145 - Table 'xxxxx' is marked as crashed and should

    数据表损坏了 只需要修复一下就可以了 进入数据库 执行以下SQL REPAIR TABLE lt datastore
  • box-shadow 设置后看不到的问题

    引子 在修复问题的时候 发现一个元素设置了 box shadow 属性 其它的元素也有公用 但这个元素的阴影看不见 试着把颜色值变的更明显 但还是看不到 问题示例 示例二维码 Origin My GitHub 问题原因 首先想到是不是属性写
  • 12月份GitHub上最热门的Web开源项目

    在过去的一个月里 mybridge对将近200个Web开发开源项目排名 mybridge根据各种因素 对项目进行比较 并从中精选出前10位 上榜开源项目所获得Star数平均为 5550 1Quicklink https github com
  • Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法)

    题目 例子 分析题目 主要目的 求出各个字符串的公共前缀 思路 本人解法 用所给实例来看 不难看出我们可以直接以竖着对应来查看是否是公共前缀 这样就有了一定的思路 然后接着想如何让他找到最长的公共前缀后就 停止下来呢 这样就能想到 从最短的
  • Win11共享打印机指定的网络名不可用?

    不知道大家在使用共享打印机的时候是否有遇到错误 共享打印机指定的网络名不可用 的情况 如果有的话 可以试试下面的解决办法 原因很明确 网络名称无法使用 有冲突 删除网络连接 重新建立即可 方法一 1 按键盘上的 Win X 组合键 或右键点
  • 审批流设计

    审批流系统 在日常企业中 经常涉及员工提交申请单 需要上级领导和多个节点审批通过 驳回 已完成申请单 实现目标 工单自定义模版 需支持用户自定义表单 拖拽式动态生成流转表单 打造低代码平台 降低了研发投入成本 提高整体人效 工单流程需支持用
  • element-ui el-upload 上传文件类型限制

    1
  • 双系统之删除Linux

    本文环境 win10 Ubuntu 先删除引导再操作卷 因为之前想学习Linux 所以就在win10上又安装了Ubuntu 现在不想搞了 再加上win10空间不太够用了 就想删除linux系统 话不多说 直接开始 删除Linux主要分为两部
  • 期望, 方差, 协方差,标准差

    期望 方差 协方差 标准差 期望 概率论中描述一个随机事件中的随机变量的平均值的大小可以用数学期望这个概念 数学期望的定义是实验中可能的结果的概率乘以其结果的总和 定义 设P x 是一个离散概率分布 自变量的取值范围为 x 1 x 2 x
  • 互联网+洗鞋店预约小程序新模式;

    互联网 洗鞋店预约小程序 1 线上线下业务的结合 传统的线下业务消费者到店可以向其推介线上的预约到家服务 让线下的消费者成为小程序内的会员 留存客户之后线上可直接触达 减少与消费者的距离 从等待客户到可以主动出击 有什么活动能第一时间推送到
  • WCF 自托管、无配置文件实现jsonp(跨域)的访问

    以下内容基于WCF4 0 本文将对比讨论配置文件方案和无配置文件方案的实现方式 WCF4 0加入了对RESTFU和标准终结点的支持 这为实现跨域提供了简单的方式 一 有配置文件的情况 首先我们先定义一个服务 ServiceContract
  • React styled-components (一) —— 基本使用

    https github com styled components styled components styled components 基本使用 介绍 优点 缺点 安装 引入 使用 基本用法 样式嵌套 介绍 styled compon