React styled-components(三)—— 高级特性

news2024/10/6 10:41:12

styled-components 高级特性

  • 样式继承
  • 嵌套
  • 设置主题

样式继承

新建 Demo.js 文件:

import React, { Component } from 'react'
import styled from 'styled-components';

const CustomStyle = styled.div`
    p {     
      color: red;
    }
`

const ContextBox = styled(CustomStyle)`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

class Home extends Component {
  render () {
    return (
      <div>
        <ContextBox>
          <p>Hello World, this is my first styled component!</p>
          <p>11111111111</p>
          <p>22222222222</p>
          <p>33333333333</p>
        </ContextBox>
      </div>
    )
  }
}
export default Home

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;

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

编译后它们会使用不同的 className,如下图:
在这里插入图片描述

嵌套

& 符号表示引用主组件,示例:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;
    /* 应用于className为blue的ContextP组件 */
    &.blue{
      color: blue;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP className="blue">11111111111</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
        <ContextP><p>33333333333</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

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

& 还有别的用处,示例:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;
    & {
      color: blue;
    }
    &&{
      color: purple;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP>11111111111</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
        <ContextP><p>33333333333</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

最终效果如下所示,一个 & 就代表一个 class 权重也就是说最后颜色会渲染 purple ,原因是 ContextP 被作用于了 .sc-csCMJt .bBDcsi 样式表。
在这里插入图片描述

这个功能非常有用,比如在使用第三方组件想要覆盖它的样式的时候,可以加多个 & 来提高样式权重,从而覆盖第三方组件的样式。

& 还可以被用作上下文选择符:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;

    /* 应用于紧邻ContextP组件的下一个ContextP组件 */
    & + &{
      color: blue;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP>11111111111</ContextP>
        <ContextP>33333333333</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

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

设置主题

styled 支持设置主题,来达到共享样式的目的。

修改 Demo.js 文件:

import React, { Component } from 'react'
import styled, { ThemeProvider } from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    color: ${props => props.theme.themeColor};
    font-size: ${props => props.theme.fontSize};
`

class Home extends Component {
  render () {
    return (
      <ThemeProvider theme={{ themeColor: 'red', fontSize: '20px' }}>
        <ContextBox>
          <ContextP>11111111111</ContextP>
          <ContextP>22222222222</ContextP>
          <ContextP>33333333333</ContextP>
        </ContextBox>
      </ThemeProvider>
    )
  }
}
export default Home

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

可以看到,h3 标签的颜色和字体大小都设置成了 theme 指定的样式。

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

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

相关文章

Tableau-创建环状图:使用2个饼图

步骤 1&#xff1a;创建饼图 在“标记”下面&#xff0c;选择“饼图”标记类型。将分类拖到颜色。将任务总数拖到角度。再拖动一次任务总数&#xff0c;放到标签。根据需要调整饼图大小。 步骤 2&#xff1a;切换到双轴图表 右键点击任意一个字段&#xff0c;创建-->计算…

3年功能测试无情被裁,3个月学习自动化测试重新开始........

前言 不知不觉在软件测试行业工作了3年之久&#xff0c;虽然说我是主做的功能测试&#xff0c;但是我也一直是兢兢业业的呀&#xff0c;不曾想去年7月份无情被辞的消息让我感到一阵沉重。我曾经一直坚信自己的技能和经验足以支撑我在这个领域的未来&#xff0c;但现实却告诉我&…

考研数据结构——表达式的转换用栈实现表达式的概述

一、用表达式实现中缀表达式转后缀表达式 把括号里的符号移到括号外 二、用栈实现中缀表达式转后缀表达式 1、遇到字母写下来 2、遇到符号加入栈中 3、遇到成对括号才出栈 4、当前读取运算符要小于等于栈顶运算符优先级则出栈 从左向右扫描 三、表达式方法实现中缀表达式转…

Shader Graph9-世界空间、物体空间、相机空间、切线空间

一、World Space世界空间 在下用的Blender软件&#xff0c;新建了一个平面&#xff0c;中间的黄色小圆点表示的世界空间的原点&#xff0c;在世界空间的物体的位置&#xff0c;都是相对于这个原点来说的&#xff0c;红色箭头表示x轴&#xff0c;绿色箭头表示y轴&#xff0c;蓝…

算法 二叉树2 || 层序遍历 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111 二叉树的最小深度 222.完全二叉树的节点个数

102 二叉树的层序遍历 队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。 而这种层序遍历方式就是图论中的广度优先遍历&#xff0c;只不过我们应用在二叉树上。 迭代法&#xff1a; /*** Definition for …

springboot和vue写个小项目

遵循“约定优于配置”的原则&#xff0c;只需要很少的配置或使用默认的配置。 能够使用内嵌的Tomcat、Jetty服务器&#xff0c;不需要部署war文件。 提供定制化的启动器Starters,简化Maveni配置&#xff0c;开箱即用。 纯&#xff09;java配置&#xff0c;没有代码生成&#xf…

4月11日,每天30秒,昨夜今晨一览无余/我国首条“西氢东送”管道纳入国家规划/国际机构:中国经济蓬勃复苏,展现广阔投资

-> 昨天的世界(点击进入) <- http://mp.weixin.qq.com/s?__bizMzU4MzQ4Mzk0Nw&mid2247488724&idx1&snd19817d3c7fd9aeb521052090eb439e0&chksmfda90390cade8a864965c805b86acd253f5d74368ae8767b7f00b80d4af5bcc42feef7635641&scene21#wechat_redir…

Qt扫盲-Qt图表类综述

Qt支持图表类综述一、概述二、图表类型1. 折线图和柱状图2. 面积图和散点图3. 柱状图4. 饼图5. 盒须图6. 烛台图表7. 星座图图表三、坐标轴 Axes四、图例五、与图表交互1. 动态绘制数据2. 深入数据3. 缩放和滚动4. 鼠标悬停六、主题一、概述 Qt Charts支持创建时尚的、交互式的…

Jetpack Compose之对话框和进度条

概述 对话框和进度条其实并无多大联系&#xff0c;放在一起写是因为两者的内容都不多&#xff0c;所以凑到一起&#xff0c;对话框是我们平时开发使用得比较多的组件&#xff0c;像隐私授权&#xff0c;用户点击删除时给用户提示这是一个危险操作等&#xff0c;进度条的使用频…

一文吃透Elasticsearch

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址 如果访问不了Github&#xff0c…

【自制】我造了一台 钢 铁 侠 的 机 械 臂 !【硬核】

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。

当我跑步时在想什么

最近好几个人对我说&#xff1a;你瘦了。这是非常激励人心的反馈&#xff0c;验证了跑步是有效的。只要今天开始锻炼&#xff0c;最胖的时候就算过去了&#xff0c;余生都会越来越美。前几天佛山50km徒步&#xff0c;带小朋友走了一半。下午有运动会&#xff0c;就没有走完了。…

提高职场效率,原来可以这么简单

身为职场人&#xff0c;你是否也有过类似的经历 看上去忙的很&#xff0c;手头东西又杂又多&#xff0c;但是一天过去了&#xff0c;到点下班发现啥都没做好当领导布置任务时&#xff0c;常常做了A后就忘记B&#xff0c;任务零碎不会安排做一件事情总是容易拖延&#xff0c;导致…

ROS开发之如何使用RPLidar A1二维激光雷达?

文章目录0.引言1.创建工作空间2.获取rplidar_ros包并编译3.检查雷达端口4.启动launch显示雷达扫描结果0.引言 笔者研究课题涉及多传感器融合&#xff0c;除了前期对ROS工具的学习&#xff0c;还需要用雷达获取数据&#xff0c;进行点云处理。虽然激光雷达已经应用很广泛&#x…

快速构建目标检测coco格式数据集

目标检测coco格式数据集coco数据集快速构建总结coco数据集 首先搞清楚coco格式数据集的组成。在data数据下、分为train、val以及annotations三个文件夹。&#xff08;image是我未划分训练集和测试集的图像存储文件夹&#xff09; 1.train文件夹&#xff1a;用来存放作为训练的图…

一个PostgreSql cli的工具

GitHub - xuejiazhi/pgii: pgii is a PostgreSql cli tool. PostgreSql is developed in CMD or Golang and can be compiled for multiple platforms pgii 是一个PostgreSql cli的工具,对PostgreSql 在CMD或者,采用Golang进行开发,可以多平台下面编译使用&#xff1a; 跨平台…

C/C++|物联网开发入门+项目实战|嵌入式C语言高级|C语言常用关键字及运算符操作-学习笔记(8)

文章目录2-2: C语言常用关键字及运算符操作关键字参考&#xff1a; 麦子学院-嵌入式C语言高级2-2: C语言常用关键字及运算符操作 [重点] 掌握C语言的常用关键宇及其应用场景&#xff0c;使用技巧 关键字 编译器&#xff1a;预先定义了一定意义的字符串&#xff0c;32个。 s…

RHCE3

综合练习&#xff1a;请给openlab搭建web网站 ​ 网站需求&#xff1a; ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! ​ 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.…

对Spring循环依赖的一些理解

什么是循环依赖 类A有个字段需要注入类B&#xff0c;类B有个字段需要注入类C&#xff0c;类C有个字段需要注入类A&#xff0c;它们之间的依赖关系形成了一个循环。 Spring初始化完一个对象之后会把实例放入单例池&#xff08;singletonObjects&#xff09;中&#xff0c;也就是…

【FFT】快速傅里叶变换

开个新坑&#xff0c; 快速傅里叶变换在现在世界的各个领域都发挥重要作用。 包括音视频压缩、5G、WIFI、卷积、航空、雷达、核武等等 为什么使用快速傅里叶变换 快速傅里叶变换计算复杂度仅为O(nlogn) 而原傅里叶变换是O(n^2) 什么是快速傅里叶变换 是指对傅里叶变换中的重…