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

news2025/1/20 11:01:02

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

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

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

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

相关文章

教你如何搭建物业-办公管理系统,demo可分享

1、简介 1.1、案例简介 本文将介绍&#xff0c;如何搭建物业-办公管理。 1.2、应用场景 该应用包含停车、收费、投诉、通知、访客等管理功能。 2、设置方法 2.1、表单搭建 1&#xff09;新建表单【业主信息】&#xff0c;字段设置如下&#xff1a; 名称类型名称类型类型…

30天学会《Streamlit》(3)

30学会《Streamlit》是一项编码挑战&#xff0c;旨在帮助您开始构建Streamlit应用程序。特别是&#xff0c;您将能够&#xff1a; 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第3天 - st.…

京东技术专家首推:微服务架构深度解析,GitHub星标120K

前言 微服务经过了长足的发展&#xff0c;在每个阶段所产生的信息都很多。在信息爆炸的当今&#xff0c;找到一本将信息梳理得井井有条的好书&#xff0c;是提升学习效率的最佳途径。 本书层次分明&#xff0c;分为原理篇、实践篇和进阶篇&#xff0c;适用于广泛的人群。理论…

电子商务客户保留策略:如何让买家回头

潜在客户转换是电子商务企业主的一大胜利。然而&#xff0c;在您成功将潜在客户转化为客户之后&#xff0c;可以而且应该采取无数步骤。购买后的有效营销应该是您的首要任务。 您可能知道&#xff0c;获取新客户的成本高于留住现有客户的成本。因此&#xff0c;制定客户保留策略…

毅硕科技携手Sentieon独家赞助第21届亚太生物信息学大会(APBC 2023)

APBC介绍 亚太生物信息学大会&#xff08;Asia Pacific Bioinformatics Conference, APBC&#xff09;是一年一度的行业国际盛会&#xff0c;汇聚区域间生物信息学领域的学者、研究人员和产业领导者&#xff0c;共同探讨生物信息学领域的研究进展、技术发展和应用创新。自2003…

分布式计算技术(下):Impala、Apache Flink、星环Slipstream

实时计算的发展历史只有十几年&#xff0c;它与基于数据库的计算模型有本质区别&#xff0c;实时计算是固定的计算任务加上流动的数据&#xff0c;而数据库大多是固定的数据和流动的计算任务&#xff0c;因此实时计算平台对数据抽象、延时性、容错性、数据语义等的要求与数据库…

银河麒麟V10操作系统之root密码重置

一、需求说明 从kingbase工程师那拷贝了一个已经安装了kingbase数据库环境的虚拟机&#xff0c;只有一个kingbase普通账户&#xff0c;root密码位置&#xff0c;且该账户未加入到sudo组中&#xff0c;无法执行新软件等的安装和部署。为了满足需要&#xff0c;我们需要重置root密…

测试5年,从纯手工测试到测试开发,我是怎么拿到腾讯25koffer的?

什么都做了&#xff0c;和什么都没做其实是一样的&#xff0c;走出“瞎忙活”的安乐窝&#xff0c;才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没&#xff1f…

4.11---Mybatis之#{}和${}的区别(复习版本)

1、在MyBatis 的映射配置文件中&#xff0c;动态传递参数有两种方式&#xff1a; 1.#{} 占位符 2.${} 拼接符 2、#{} 和 ${} 的区别 #{} 为参数占位符 ?&#xff0c;即sql 预编译 ${} 为字符串替换&#xff0c;即 sql 拼接 #{}&#xff1a;动态解析 -> 预编译 -> 执行 $…

[STM32F103C8T6] 重做51 基于iic的oled显示实验

51单片机没有硬件iic&#xff0c;我们是通过io口软件模拟iic时序 https://blog.csdn.net/weixin_63303786/article/details/128705478?spm1001.2014.3001.5501https://blog.csdn.net/weixin_63303786/article/details/128705478?spm1001.2014.3001.5501 而stm32有iic硬件&am…

Mysql(函数) 字符串截取、拆分, 逗号分割字符串当做 in 的条件

目录 引言: 数据库函数的总结(一) 1. mysql截取拆分 2. 逗号分割的字符串 作为in条件 -> 2.1 正常的效果应该是 ---> 2.1.1 错误: 3. 字符串合并(多条数据合并 用、分割) 引言: 数据库函数的总结(一) 1. 字符串截取、拆分 2. 逗号分割字符串当做 in 的条件 …

Mysql 学习(三)InnDB 存储引擎-页结构

数据页结构的大概 首先我们先来了解一下&#xff0c;InnoDB的存储单元是数据页的概念&#xff0c;页的大小一般是16KB&#xff0c;而InnoDB里面存放了很多不同目的 的数据页&#xff0c;比如存放Insert Buffer的信息页&#xff0c;Undo的日志页等等。但是这里我们主要讲解的是…

从C语言到C++(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)

目录 前言 1.认识C 2.C的重要性 3.如何学习C 4.编写hello world&#xff01; 5.关键字 6.命名空间&#xff08;namespace&#xff09; 6.1命名空间的定义 6.2命名空间里的内容 6.3命名空间重名问题 6.4命名空间展开问题 6.5匿名命名空间 7.C的输入与输出 7.1 输入和…

生产模块-报工自动产生返工订单(触发点-Trigger Point)

目录 应用场景 配置点-完整模式&#xff08;通过自定义状态触发&#xff09; 其他说明 应用场景 一般来说适合自动化程度高&#xff0c;生产集成了MES和质检的功能&#xff0c;工序报工时发生返工业务时&#xff0c;根据返工的指令&#xff0c;系统直接下达返工订单。例如&…

3年经验,面试测试岗只会功能测试开口要求18K,令我陷入沉思。

由于朋友临时有事&#xff0c; 所以今天我代替朋友进行一次面试&#xff0c;公司需要招聘一位自动化测试工程师&#xff0c;我以很认真负责的态度完成这个过程&#xff0c; 大概近30分钟。 主要是技术面试&#xff0c; 在近30分钟内&#xff0c; 我与被面试者是以交流学习的方式…

【CSS】定位 ③ ( 绝对定位 | 父容器有定位相对于父容器定位 | 父容器没有定位相对于浏览器进行定位 )

文章目录一、绝对定位二、标准流下的父容器与子元素关系1、标准流下父容器与子容器代码2、移动父容器后的效果三、子元素设置绝对定位与父容器是否有定位的效果对比1、父容器没有定位的情况下为子容器添加定位2、父容器有定位的情况下为子容器添加定位3、父容器没有定位爷爷容器…

Doris(2):Doris编译部署

1 Doris编译 Apache Doris提供直接可以部署的版本压缩包&#xff1a;https://cloud.baidu.com/doc/PALO/s/Ikivhcwb5 也可以自行编译压缩包后使用&#xff08;推荐&#xff09; 1.1 使用 Docker 开发镜像编译&#xff08;推荐&#xff09; 这个是官方文档推荐的&#xff0c;…

4.15搞力扣哈哈

1. 1023. 驼峰式匹配 难度中等107收藏分享切换为英文接收动态反馈 如果我们可以将小写字母插入模式串 pattern 得到待查询项 query&#xff0c;那么待查询项与给定模式串匹配。&#xff08;我们可以在任何位置插入每个字符&#xff0c;也可以插入 0 个字符。&#xff09; 给…

map原理

map源码结构体&#xff1a; type hmap struct {count int // 元素的个数B uint8 // buckets 数组的长度就是 2^B 个overflow uint16 // 溢出桶的数量​buckets unsafe.Pointer // 2^B个桶对应的数组指针oldbuckets unsafe.Pointer // 发生扩容时&#xff0…

系统学习Git

Git目录工作区、暂存区和版本库分别是什么&#xff1f;Git常用命令有哪些&#xff1f;Git是如何进行分支管理的&#xff1f;Git如何查看提交历史&#xff1f;实践出真知&#xff01;报错fatal: pathspec text1.txt did not match any filesGit 是一个开源的分布式版本控制系统工…