styled-components的用法详解

这次给大家带来styled-components的用法详解,使用styled-components的注意事项有哪些,下面就是实战案例,一起来看一下。

styled components 一种全新的控制样式的编程方式,它能解决 CSS 全局作用域的问题,而且移除了样式和组件间的映射关系

import React from 'react';import styled from 'styled-components';import { render } from 'react-dom'; const Title = styled.h1`    font-size: 1.5em;    text-align: center;    color: palevioletred;`; class App extends React.Component {    render() {        return (            Hello world        )    }} render(    ,    document.getElementById('app'));

登录后复制

styled.h1 是一个标签模板函数

styled.h1 函数返回一个 React Component , styled components 会为这个 React Component 添加一个 class ,该 class 的值为一个随机字符串。传给 styled.h1 的模板字符串参数的值实际上是 CSS 语法,这些 CSS 会附加到该 React Component 的 class 中,从而为 React Component 添加样式

styled-components的用法详解

二、基于 props 定制主题

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

);

登录后复制

我们在组件中传入的所有 props 都可以在定义组件时获取到,这样就可以很容易实现组件主题的定制。如果没有 styled-components 的情况下,需要使用组件 style 属性或者定义多个 class 的方式来实现

三、组件样式继承

通常在 css 中一般会通过给 class 传入多个 name 通过空格分隔的方式来复用 class 定义,类似 class=”button tomato” 。在 styled-components 中利用了 js 的继承实现了这种样式的复用:

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

登录后复制

子组件中的属性会覆盖父组件中同名的属性

四、组件内部使用 className

在日常开发中总会出现覆盖组件内部样式的需求,你可能想在 styled-components 中使用 className ,或者在使用第三方组件时。

  

Hello Word

登录后复制

五、组件中维护其他属性

styled-components 同时支持为组件传入 html 元素的其他属性,比如为 input 元素指定一个 type 属性,我们可以使用 attrs 方法来完成

const Password = styled.input.attrs({  type: 'password',})`  color: palevioletred;  font-size: 1em;  border: 2px solid palevioletred;  border-radius: 3px;`;

登录后复制

在实际开发中,这个方法还有一个有用处,用来引用第三方类库的 css 样式:

const Button = styled.button.attrs({  className: 'small',})`  background: black;  color: white;  cursor: pointer;  margin: 1em;  padding: 0.25em 1em;  border: 2px solid black;  border-radius: 3px;`;

登录后复制

编译后的 html 结构如下:

登录后复制

可以用这种方式来使用在别处定义的 small 样式,或者单纯为了识别自己定义的 class ,因为正常情况下我们得到的 class 名是不可读的编码

六、CSS 动画支持

styled-components 同样对 css 动画中的 @keyframe 做了很好的支持。

import { keyframes } from 'styled-components';const fadeIn = keyframes`  0% {    opacity: 0;  }  100% {    opacity: 1;  }`;const FadeInButton = styled.button`  animation: 1s ${fadeIn} ease-out;`;

登录后复制

七、兼容现在已有的 react components 和 css 框架

styled-components 采用的 css-module 的模式有另外一个好处就是可以很好的与其他的主题库进行兼容。因为大部分的 css 框架或者 css 主题都是以 className 的方式进行样式处理的,额外的 className 和主题的 className 并不会有太大的冲突

styled-components 的语法同样支持对一个 React 组件进行扩展

const Styledp = styled(Row)`  position: relative;  height: 100%;  .image img {    width: 100%;  }  .content {    min-height: 30em;    overflow: auto;  }  .content h2 {    font-size: 1.8em;    color: black;    margin-bottom: 1em;  }`;

登录后复制

缺点

不能用 stylelint 检查你的 Css 代码

在使用 styled-components 的过程中也会遇到一些问题,比如我们的项目会用stylelint来做样式代码的检查,但是使用了 styled-compoents 后就没办法让stylelint的规则生效了。

不能用 prettier 来格式化你的 Css 代码

现在prettier不仅可以帮你格式化 JS 代码,还可以格式化 CSS 代码,但如果使用了styled-components的话,JS 中的字符串模板内容没有办法使用prettier来格式化,这个也比较尴尬。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

CSS3的鼠标移入图片动态提示效果

Sticky Footer 绝对底部的方法

CSS3做出条纹大背景

以上就是styled-components的用法详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2899198.html

(0)
上一篇 2025年3月10日 23:43:02
下一篇 2025年2月24日 05:27:25

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 伪元素::before与::after使用详解

    这次给大家带来伪元素::before与::after使用详解,使用伪元素::before与::after的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 众所周知::before与::after两个伪元素其实是CSS3中的内容,然而…

    2025年3月10日 编程技术
    200
  • focus-within的使用详解

    这次给大家带来focus-within的使用详解,使用focus-within的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS的世界真是一个神奇的世界。可能众多前端开发者听说过 :focus 并未听说过 :focus-within…

    编程技术 2025年3月10日
    200
  • CSS双飞翼布局的详解

    这次给大家带来CSS双飞翼布局的详解,实现CSS双飞翼布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局,就是两端固定宽高,中间自适应的三栏布局 先来张图,左边和右边的灰色块是固定宽高的,中间绿色的区域是宽高自适应 方式一:…

    2025年3月10日
    200
  • 双飞翼布局与圣杯布局图文详解

    这次给大家带来双飞翼布局与圣杯布局图文详解,使用双飞翼布局与圣杯布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局和圣杯布局都是实现两边固定中间自适应的三栏布局的方式,最近在整理三栏布局实现方式的笔记,决定但拉出来一篇,记一…

    2025年3月10日 编程技术
    200
  • BFC模式详解

    这次给大家带来bfc模式详解,使用bfc模式的注意事项有哪些,下面就是实战案例,一起来看一下。 详解BFC【 block formatting context】 BFC这个东西说常见的话你可能不觉得,但是你肯定会常用到,也许你在用的时候也没…

    编程技术 2025年3月10日
    200
  • css中px、em和rem使用详解

    相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下…

    编程技术 2025年3月10日
    200
  • 动态加载css详解

    这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法注意事项来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公…

    编程技术 2025年3月10日
    200
  • Vue的todoMVC使用详解

    这次给大家带来Vue的todoMVC使用详解,Vue的todoMVC使用注意事项有哪些,下面就是实战案例,一起来看一下。 这个示例是模仿官网示例样式和功能用我自己的方式写的,基本上没有看官网的源码,只参考自定义指令。让我们一步步来探讨一下。…

    2025年3月10日
    200
  • 详解CSS中position属性的用法

    本篇文章介绍了css中的position属性的用法、分类以及使用效果展示,希望对学习css的朋友有帮助! 详解CSS中position属性的用法 一、position属性有什么作用? CSS position属性用于指定一个元素在文档中的定…

    2025年3月10日 编程技术
    200
  • CSS 中 @ 用法详解

    at-rule是一个声明,为CSS提供执行或怎么表现的指令。每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么。这是一个通用的语法,尽管每个at-rule有其它语法变体。 常规规则 常规规则遵循下面的…

    2025年3月10日
    200

发表回复

登录后才能评论