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 入门使用(一) 的相关文章

  • 将引导程序中的表单居中不起作用[重复]

    这个问题在这里已经有答案了 我试图将我的表单置于 div 中 但我使用的方法不起作用 我尝试使用引导文档中所述的 justify content center 属性 但它没有将其居中 当我尝试将其居中但应用时display flex and
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • Strapi 未加载 Digital Ocean 上托管的现有 MongoDB 中的集合

    我正在使用 Strapi 创建一个新应用程序 并尝试将其与托管在 Digital Ocean 上的 MongoDB 连接 但不幸的是Strapi 无法从现有 MongoDB 获取集合 在这里 我提到我实现 Strapi 与现有 MongoD
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • Vue Draggable - 如何仅替换所选项目以防止移动网格上的所有其他项目?

    这是一个要测试的示例 https codesandbox io s j4vn761455 file src App vue 112 116 https codesandbox io s j4vn761455 file src App vue
  • JavaScript 原型 - 请澄清

    有人可以帮我理解原型属性吗 我不明白原型属性是函数的属性还是函数内部的属性 假设我们创建以下构造函数 Food 此时 函数 Food 具有 Food prototype 属性 由于 Food 是 Object 的实例 因此这意味着 Obec
  • 数据表“footerCallback”函数未在页脚中显示结果

    我尝试获取每列的总和并将结果显示在页脚中 我在用着 页脚回调 https datatables net reference option footerCallbackDatatables提供的功能 但是它在页脚中没有显示任何内容 数据表解释
  • 新BFC“清”浮箱

    如示例所示 应用display inline block 到包含块似乎 清除 了其中的浮动框 wrapper inline block display inline block left column background color te
  • 如何在启用导航栏的情况下打开新的浏览器窗口?

    我有这个JS方法 function OpenLink strDestination var features left 10 top 10 location 0 menubar 0 resizable 0 scrollbars 1 stat
  • (CSS) 倾斜 img 框架而不扭曲图像

    我正在制作一个包含许多倾斜元素的网站 如下所示 这还不错 CSS 转换可能会扭曲它 但是这个怎么样 图像没有扭曲 只是框架以倾斜的方式裁剪 最简单 最好的方法是什么 I think this http codepen io antiblan
  • 将数组中的所有元素相乘

    我在这里找不到我真正想要的例子 我想将所有数组元素相乘 因此如果数组包含 1 2 3 总和将为 123 6 到目前为止 我已经得到了这段代码 但它返回未定义 function multiply array var sum 1 for var
  • 当表格在 IE 中获得焦点时,表格滚动条会向上跳跃

    问题 我有一个table有包装的div with overflow y auto 一旦table获得焦点 滚动条向上跳 我怎样才能防止这种情况发生 我经历过这种行为IE9 不在 Chrome 中 请注意 我已添加tabindex到桌子上 以
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 带有 `:hover` 和多个相邻兄弟选择器的 Webkit 错误

    Safari 和 Chrome 以及 Opera 和 Firefox 都可以处理 hover伪类和相邻兄弟选择器 a hover div 这有效 但是 当添加另一个相邻兄弟时 div hover a div Webkit 崩溃了 但是 如果
  • Promise 构造函数回调的主体何时执行?

    假设我有以下代码构造一个Promise function doSomethingAsynchronous return new Promise resolve gt const result doSomeWork setTimeout gt
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • 当选项卡重新加载(chrome 扩展)时,如何运行此脚本?

    所以我想在指定 URL 中重新加载选项卡时运行脚本 它几乎可以工作 但实际上 id 不能 这是我的清单文件 manifest version 2 name Sample Extension description Sample Chrome
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • 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