iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js类库styled-components快速入门教程
  • 348
分享到

js类库styled-components快速入门教程

2024-04-02 19:04:59 348人浏览 安东尼
摘要

目录styled-components 是什么?相对于其他预处理有什么优点?解决了什么问题?安装最基础的使用传递propsprops高级用法塑造组件组件样式继承改变组件标签维护其他属

styled-components 是什么?

styled-components 是一个常用的 CSS in js 类库。和所有同类型的类库一样,通过 js 赋能解决了原生 css 所不具备的能力,比如变量、循环、函数等。

相对于其他预处理有什么优点?

  • 诸如 sass&less 等预处理可以解决部分 css 的局限性,但还是要学习新的语法,而且需要对其编译,其复杂的 webpack 配置也总是让开发者抵触。
  • 如果有过sass&less的经验,也能很快的切换到styled-components,因为大部分语法都类似,比如嵌套,& 继承等, styled-componens 很好的解决了学习成本与开发环境问题,很适合 React 技术栈 && React Native 的项目开发。

解决了什么问题?

  • className 的写法会让原本写css的写法十分难以接受
  • 如果通过导入css的方式 会导致变量泄露成为全局 需要配置WEBpack让其模块化
  • 以及上面提到的解决了原生 css 所不具备的能力,能够加速项目的快速开发

官方文档

https://styled-components.com/docs

安装

npm install --save styled-components

编辑器智能提示

2018-06-11更新

最基础的使用

import styled from 'styled-components'
const Title = styled.h1`
    font-size: 1.5em;
    text-align: center;
    color: palevioletred;
`;
// 相当于  const Title = styled.h1(xx)
const Wrapper = styled.section`
    padding: 4em;
    background: papayawhip;
`;
    render () {
        return (
            <Wrapper>
                <Title>Hello styled-components</Title>
            </Wrapper>
        )
    }

此时我们可以看到控制台中输出了一个随机的className,这是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(
    <div>
        <Button>Normal</Button>
        <Button primary>Primary</Button>
    </div>
);

在组件传递的props都可以在定义组件时获取到,这样就很容易实现定制某些风格组件

props高级用法

设置默认值,在未设定必须传值的情况下我们会给一个默认值(defaultProps)

export default class ALbum extends React.Component {
    constructor (props) {
        super(props)
        this.state = {
            // 接收传递的值
            imgSrc: props.imgSrc
        }
    }
    render () {
        const {imgSrc} = this.state
        return (
            <Container imgSrc={imgSrc}>
            </Container>
        )
    }
}
// 在这里是可以拿到props的 
const Container = styled.div`
    background-size: cover;
    background-image: url(${props =>  props.imgSrc});
    width: 100%;    
    height: 300px;
`
// 当然没传值也没关系  我们设置默认值
Container.defaultProps = {
    imgSrc: Cover
}

塑造组件

这个非常有用 你可能会遇到一些原本就已经是组件了 但是你要为他添加一些样式,这时候该怎么办呢 ?

// 传递className 在react-native 中要使用 style
const Link = ({className , children}) => (
    <a className={className}>
        {children}
    </a>
)
const StyledLink = styled(Link)`
    color: palevioletred;
`
render(
    <div>
        <Link>普通组件</Link>
        <StyledLink>有颜色吗?</StyledLink>
    </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 = Button.extend`
    color: tomato;
    border-color: tomato;
`;
// TomatoButton 部分样式继承自 Button 这种情况下不会生成两个class

改变组件标签

在闲的蛋疼的情况下 我们想要改变组件的标签 比如把 button 变成 a 标签

// 利用上面定义的 Button 组件 调用 withComponent 方法
const Link = Button.withComponent('a')

维护其他属性

在某种情况下,我们可能需要用到第三方库样式,我们可以使用这个方法轻松达到

const Input = styled.input.attrs({
    // 定义静态 props
    type: 'passWord',
    // 没传默认使用 1em
    margin: props => props.size || '1em',
    padding: props => props.size || '1em'
})`
    color: palevioletred;
    font-size: 1em;
    border: 2px solid palevioletred;
    border-radius: 3px;
    // 动态计算props
    margin: ${props => props.margin};
    padding: ${props => props.padding}
`
render ( <Input size='1em'></Input>  <Input size='2em'></Input> )

动画

动画会生成一个随机类名 而不会污染到全局

import { keyframes } from 'styled-components'
// CSS 动画
const rotate360 = keyframes`
    from {
        transform: rotate(0);
    }
    to {
        transform: rotate(360deg);
    }
`
const Rotate = Button.extend`
    animation: ${rotate360} 2s linear infinite;
`
render ( <Rotate>  ?  </Rotate> )

结语

styled-components虽然解决了大部分问题,增加了可维护性,但是破坏了原生体验,时常我们需要写更多的代码来达到业务要求,希望未来有更好的方案,更多关于js类库styled-components的资料请关注编程网其它相关文章!

--结束END--

本文标题: js类库styled-components快速入门教程

本文链接: https://www.lsjlt.com/news/152559.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js类库styled-components快速入门教程
    目录styled-components 是什么?相对于其他预处理有什么优点?解决了什么问题?安装最基础的使用传递propsprops高级用法塑造组件组件样式继承改变组件标签维护其他属...
    99+
    2024-04-02
  • js类库styled-components入门实例分析
    这篇文章主要介绍“js类库styled-components入门实例分析”,在日常操作中,相信很多人在js类库styled-components入门实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js类...
    99+
    2023-07-02
  • Springboot快速入门教程
    入门Springboot 项目创建在IDEA中创建即可。 注意点: 1、所有文件都需要放在 : Application文件的同级或下级目录中 2、application.proper...
    99+
    2024-04-02
  • Unity3D快速入门教程
    Unity3D游戏引擎介绍 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏...
    99+
    2024-04-02
  • SparkSQL快速入门教程
    目录(一)概述(二)SparkSQL实战(三)非JSON格式的Dataset创建(四)通过JDBC创建DataFrame(五)总结(一)概述 SparkSQL可以理解为在原生的RDD...
    99+
    2024-04-02
  • sklearn 快速入门教程
    1. 获取数据 1.1 导入sklearn数据集   sklearn中包含了大量的优质的数据集,在你学习机器学习的过程中,你可以通过使用这些数据集实现出不同的模型,从而提高你的动手实践能力,同时这个过程也可以加深你对理论知识的理解和把握...
    99+
    2023-01-31
    入门教程 快速 sklearn
  • Python OpenCV快速入门教程
    目录OpenCV先决条件我们会在本文中涵盖7个主题读,写和显示图像imread():imshow():imwrite():读取视频并与网络摄像头集成句法调整大小和裁剪图像句法裁剪图像...
    99+
    2024-04-02
  • ASP.NET Core快速入门教程
    目录第一课 基本概念第二课 控制器的介绍第三课 视图与表单第四课 数据验证第五课 路由规则第六课 应用发布与部署源码地址第一课 基本概念 基本概念Asp.Net Core Mvc是....
    99+
    2024-04-02
  • flyway的快速入门教程
    目录 一、简单介绍 二、为什么要使用flyway 三、flyway是如何工作的 四、如何使用flyway 1、先要初始化一个SpringBoot项目,引入依赖 2、在application.yml中添加相关配置 3、根据配置文件中填写的脚本...
    99+
    2023-09-27
    spring boot flyway database mysql
  • BlenderPython编程快速入门教程
    目录Blender Python 编程数据访问访问集合访问属性数据创建/删除自定义属性上下文 Context运算符 Operators (Tools)Operator Poll()将...
    99+
    2024-04-02
  • MyBatis入门学习教程-MyBatis快速入门
    目录Mybatis一、快速开始1、创建 Maven 项目3、配置 Maven 插件4、新建数据库,导入表格5、编写 Mybatis 配置文件6、编写实体类7、编写 mapper 接口...
    99+
    2024-04-02
  • Web Components入门教程示例详解
    目录Web Components不兼容IE困境Web Components核心技术自定义元素HTML模板(template、slot)shadow root(影子Dom)Web Co...
    99+
    2023-05-18
    Web Components入门教程 Web Components
  • 一小时快速入门Python教程
    目录为什么使用PythonPython应用场合Hello world国际化支持便易用的计算器字符串,ASCII和UNICODE使用List条件和循环语句如何定义函数文件I/O异常处理...
    99+
    2024-04-02
  • Vue + OpenLayers 快速入门学习教程
    Openlayers 是一个模块化、高性能并且功能丰富的WebGIS客户端的JavaScript包,用于显示地图及空间数据,并与之进行交互,具有灵活的扩展机制。 简单来说,使用 O...
    99+
    2024-04-02
  • XXL-Job快速入门+详细教程
    XXL-Job快速入门+详细教程 1 概念 XXL-JOB是一个轻量级分布式任务调度平台 详细说明:XXL-JOB是一个任务调度框架,通过引入XXL-JOB相关的依赖,按照相关格式撰写代码后,可在...
    99+
    2023-09-27
    java 开发语言 xxl-job 定时任务 分布式
  • Fluent Mybatis快速入门详细教程
    使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。 不再需要在Dao中组装查询或更新...
    99+
    2024-04-02
  • Vue基础知识快速入门教程
    目录一、Vue程序初体验1.1 下载并安装vue.js1.2 第一个Vue程序 1.3  Vue的data配置项1.4  Vue的template配置项...
    99+
    2023-05-18
    vue vue入门 vue基础
  • Python入门教程(二)Python快速上手
    目录Python 安装Python 快速入门Python 命令行Python 安装 已经安装软件的小伙伴要检查是否已在 Windows PC 上安装了 python,请在开始栏中寻找...
    99+
    2023-05-14
    Python入门 Python快速
  • Playwright快速上手指南(入门教程)
    目录1. 为什么选择Playwright1.1 Playwright的优势1.2 已知局限性2. Playwright使用2.1 安装2.2 自动录制2.3 定制化编写2.4 网络拦...
    99+
    2024-04-02
  • PyQT安装教程:快速入门指南
    PyQT安装教程:快速入门指南 PyQT是一个强大的Python界面开发库,可以用于创建各种用户界面应用程序。本文将为大家提供PyQT的安装教程和快速入门指南,并提供具体的代码示例,帮...
    99+
    2024-02-22
    教程 安装 pyqt python包
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作