Styled-component 入门使用(一)

2023-11-08

Styled-component 入门使用(一)

styled-components 优点

  1. 自动引入关键:styled-components可以跟踪哪些组件在页面上呈现,并注入其样式。可以实现加载所需的最小代码
  2. 不会产生类名冲突:styled-components生成唯一的类名称。
  3. CSS的更容易删除:在css中很难知道是否在代码库中某个地方使用了类名。styled-components能轻松的检测。如果该组件未使用并被删除,则其所有样式都将被删除。
  4. 简单的动态样式:根据其props参数或全局主题调整组件的样式,而无需手动管理数十个class。
  5. 毫无痛苦的维护:不必在不同的文件上寻找影响组件的样式,维护都是小菜一碟。
  6. 自动提供前缀:按标准写style,让styled-components处理其余部分。

安装

# with npm
npm install --save styled-components
# with yarn
yarn add styled-components

(VS推荐插件vscode-styled-components

用法

基本

const Title = styled.h1`
  font-size: 1.5em;
  color: red;
`;
// Use Title and Wrapper like any other React component – except they're styled!
render(
    <Title>
      Hello World!
    </Title>
);

传递参数

const Button = styled.button`
	 color:${props=>props.color?props.color:'blue'};
	background:${props=>props.primaty?'red':'yellow'};
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

render(
  <div>
    <Button color={'green'}>Normal</Button>
    <Button primary>Primary</Button>
  </div>
);

继承样式(在原有样式上修改

const Button = styled.button`
  color: palevioletred;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

const TomatoButton = styled(Button)`
font-size:2em
`

render(
  <div>
    <Button>Normal Button</Button>
<Button as='a' herf="#">Normal Button as a tag</Button>
    <TomatoButton>Tomato Button</TomatoButton>
  </div>
);

包装任意组件

const Link = ({ className, children }) => (
 <button className={className}>1234</button> // 注意要引入className
);

const StyleButton = styled(Link)`
color:red;
font-size:18px;
`

render(
  <div>
    <Link>Unstyled, boring Link</Link>
    <br />
    <StyleButton/>
  </div>
);

伪元素(使用&代替父元素

const Thing = styled.div`
  color: blue;

  &:hover {
    color: red; 
  }

`

render(
  <React.Fragment>
    <Thing>Hello world!</Thing>
  </React.Fragment>
	)

使用.attr来传递参数

const Input = styled.input.attrs(props => ({
  size: props.size || "1em", // 初始化参数
}))`

  padding: ${props => props.size};
`;

render(
  <div>
    <Input placeholder="A small text input" />
    <br />
    <Input placeholder="A bigger text input" size="2em" />
  </div>
);

使用动画

const rotate = keyframes` // 使用keyframes关键字
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
`;

const Rotate = styled.div`

  animation: ${rotate} 2s linear infinite;

`;

render(
  <Rotate>JSS</Rotate>
);

实践仓库

https://github.com/withspectrum/spectrum/blob/alpha/src/components/avatar/style.js

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

Styled-component 入门使用(一) 的相关文章

  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • Angular - CSS - 自定义类型=文件输入,如何使用按钮而不是标签?

    我制作了一个类型为 file 的自定义输入字段 因为我不喜欢默认的输入字段 为了实现这一目标 我做了
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 为什么 IE8 在我的图像锚标记上添加底部边框?

    我知道 这很可悲 但今天早上 IT 刚刚在我的机器上安装了 IE8 我立刻遇到了一个明显的问题 尽管我知道答案就在我面前 但我已经把它搞砸了太久了 首先 这是网站 www mchenry edu http www mchenry edu 在
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 网站的主体和元素固定在 980px 宽度上,不会缩小

    我试图在 Rails 应用程序顶部启动前端 仅 HTML CSS 页面 但在使用 320px 视口时遇到问题 有些元素不会按比例缩小 我不明白为什么 我已经完成了检查元素 为各种元素提供了max width 100 and or width
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • 如何创建适合屏幕宽度的等宽/高框? [复制]

    这个问题在这里已经有答案了 我正在尝试建立一个网站 其中有很多宽度和高度相等的框 例如 我有一个页面 其中并排有两个相同大小的框 简单的解决方案是将宽度和高度设置为 50vw 这在出现滚动条之前效果很好 我已经用谷歌搜索了几个小时 但无法理
  • HTML 锚点,禁用样式

    我有一些 html 锚链接代码 与文档的其余部分不同 我希望它看起来不是链接 有没有一种简单的方法可以禁用由于将文本包装在锚标记中而引起的样式更改 而不必强行使其相同 即 如果我更改正文字体样式 我不必也更改其他一些 link东西 将颜色设
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐

  • Active Directory的基本概念

    前言 本文是面对准备加入Active Directory编程的初学者的一份文章 主要是讲解Active Directory 活动目录 的一些概念和相关知识 这篇文章本来是不想写下来的 因为概念性内容的编写需要查阅很多的资料 也怕自己讲的不够
  • 计算机无法识别华为m3,华为M3平板怎么开启学生模式过滤不良网站?

    对于孩子使用电子设备这件事儿 家长们总会陷入到一种矛盾中 即 支持用吧 但是现如今信息复杂 孩子没有自控力 不能每天都盯着 监督不慎误入歧途怎么办 支持不用吧 但是上面又有很多资料资源 值得孩子们去学习 视频教学 益智科普类的软件层出不穷
  • layout_weight 标签用于在线性布局中指定父控件的剩余空间比例的分配

    layout weight 用于在线性布局中指定父控件的剩余空间比例的分配
  • 数学建模竞赛论文中的Word使用

    1 使用样式 除了Word原先所提供的标题 正文等样式外 还可以自定义样式 如果你发现自己是用选中文字然后用格式栏来设定格式的 一定要注意 想想其他地方是否需要相同的格式 如果是的话 最好就定义一个样式 对于相同排版表现的内容一定要坚持使用
  • 如何配置Vue脚手架(Vue CLI)

    第一步 用cmd打开命令提示符 输入命令行 npm config set registry https registry npm taobao org 第二步 打开cmd 输入命令行 npm install g vue cli 中途可能会出
  • MATLAB/simulink时域分析之性能指标(0基础)

    目录 6 时域分析 6 1 性能指标 6 1 1 典型输入信号 6 1 2 一阶系统时域响应 6 1 3 二阶系统时域响应 6 1 4 二阶系统的改善 6 时域分析 由于多数控制系统是以时间作为独立变量 所以人们往往关心输出对时间的响应 对
  • 刷脸支付创新高效促进消费者重新光临

    刷脸支付成为了移动金融产业新的焦点 这离不开代理的卖力推广 刷脸支付代理成为大多创业者的选择 从今往后 脸就是钱包走人寻常百姓家 再也不用担心发生突发情况 尴尬放回商品的局面 现在可以在便利店 部分夫妻店看见这样的画面 收银台不见了 换成了
  • python源码保护之cython

    转载请注明出处 准备 项目需要 是在windows7上操作 python3 7 针对python项目 而非单个的python程序 思路 先将py代码转成c代码 然后编译成pyd window上是pyd linux上是so 文件 安装cyth
  • base64转图片

    base64转图片 param base64Code base64码 public static void convertBase64ToImage String base64Code BufferedImage image byte im
  • Qt绘图与信号事件

    Qt应用开发的基本模式 面向对象 继承QDailog gkdialog h ifndef GK DIALOG H define GK DIALOG H include
  • 我的第一个python爬虫

    文章目录 前言 一 python爬虫是什么 二 豆瓣电影TOP250排行榜信息爬取 1 发送请求 2 获取数据 3 解析数据 4 保存数据 总结 前言 今天想跟大家分享下我完成第一个python爬虫项目的过程 同时记录自己的 第一次 我的第
  • windows下dll文件的创建详细教程

    1 前言 dll文件是啥 就不作过多赘述了 现在直接教大家如何创建与使用dll文件 本文基于windows系统 使用的编译相关工具为visual studio 2019 2 创建dll 2 1 创建dll工程 首先打开visual stud
  • LaTex使用技巧20:LaTex修改公式的编号和最后一行对齐

    写论文发现公式编号的格式不对 要求是如果是多行的公式 公式编号和公式的最后一行对齐 我原来使用的是 equation 环境 begin equation begin aligned a b c c d end aligned end equ
  • Unity中相机拍照并保存下来脚本

    以下是一个示例的Unity拍照脚本 用于拍摄相机看到的内容并保存在工程根目录下 using System using UnityEngine using System IO public class CameraCapture MonoBe
  • 八邻域断点检测

    八邻域断点检测 本文的理论思想主要来源大家可以参照 迈克老狼2012 OpenCV学习 13 细化算法 1 本文是我自己尝试着将八邻域的细化思想 运用到断点检测上 个人觉得其实仅仅是八邻域应用的一小方面大家可以尝试着往其他方面应用 其实相对
  • Linux SPI 总线 和设备驱动架构之三:SPI控制器驱动

    通过第一篇文章 我们已经知道 整个SPI驱动架构可以分为协议驱动 通用接口层和控制器驱动三大部分 其中 控制器驱动负责最底层的数据收发工作 为了完成数据收发工作 控制器驱动需要完成以下这些功能 1 申请必要的硬件资源 例如中断 DMA通道
  • Photoshop提示暂存盘已满怎么办?ps暂存盘已满如何解决?

    打开ps软件提示暂存盘已满是什么意思 如何解决Photoshop提示暂存盘已满 本文给大家带来了解决办法 一起来看看吧 如果遇到 暂存盘已满 错误 通常意味着用作暂存盘的硬盘 或驱动器 用尽了执行任务所需的存储空间 解决方案 方法一 释放更
  • spring中的那一堆Configuration

    EnableAutoConfiguration 开启Spring Application Context自动配置 系统会根据你引入的jar包情况 自动配置一些需要的bean 参考spring boot autoconfigure jar 下
  • python典型案例:打印输出九九乘法表

    python典型案例 打印输出九九乘法表 使用for循环语句打印输出代码如下 for x in range 1 10 外循环控制行数 for y in range 1 x 1 内循环控制列 print x y x y end end表示 为
  • Styled-component 入门使用(一)

    Styled component 入门使用 一 styled components 优点 自动引入关键 styled components可以跟踪哪些组件在页面上呈现 并注入其样式 可以实现加载所需的最小代码 不会产生类名冲突 styled