css-in-js

1.概述

        CSS - in - JS 是一种将 CSS 样式写在 JavaScript 中的技术。它允许开发者使用 JavaScript 来定义和管理组件的样式,而不是传统的将 CSS 样式写在独立的.css 文件中或者在 HTML 文件的<style>标签内。

2.背景

        随着前端应用的复杂度不断增加,尤其是在组件化开发的场景下。传统的 CSS 方式在处理组件的样式隔离、动态样式以及样式的依赖管理等方面出现了一些问题。CSS - in - JS 的出现主要是为了解决这些问题,使得样式能够更好地与组件的逻辑结合在一起,方便进行维护和更新。

 3.优势

        1. 样式隔离:在组件化开发中,每个组件的样式可以独立地定义在其对应的 JavaScript 文件中。这样可以避免样式的全局污染,防止一个组件的样式意外地影响到其他组件的样式。例如,在一个大型的 React 应用中,有多个按钮组件,如果使用传统的 CSS,可能会出现样式冲突,而 CSS - in - JS 可以确保每个按钮组件的样式只作用于自身。

        2.动态样式:可以根据组件的状态或者属性来动态地生成样式。通过 JavaScript 的逻辑判断,在代码中动态地设置样式,这种方式比传统的通过添加或删除 CSS 类名来实现动态样式更加灵活。

        3.样式依赖管理:由于样式和组件的逻辑代码在同一个文件中,所以可以很清楚地看到样式和组件其他部分(如状态、属性、事件处理等)之间的依赖关系。这有助于在开发和维护过程中更好地理解代码结构。

4.css-in-js实现方式

      实现css-in-js的方式大致有三种 1.内联样式  2.styled-components 3.emotion

    1.内联样式

        这是最基本的 CSS - in - JS 形式。在 JavaScript 中直接通过设置元素的style属性来定义样式。下面是我以react为例:

       

import React from 'react'
import styled from 'styled-components';
export default function B() {
   
    

    let style={
         color: 'blue',
        fontSize: '16px'
    }
    return (
        <div>
            <button style={style}>哈哈哈</button>

        </div>
    )
}

2.styled-components

        Styled - Components 是一个用于在 React 应用(也可用于其他基于 JavaScript 的前端框架)中编写 CSS 样式的 JavaScript 库。它允许你使用 JavaScript 语法来定义样式,并且这些样式会以一种高效且易于管理的方式应用到组件上

安装:npm install styled-components

import React from 'react'
import styled from 'styled-components';
export default function B() {
    const Button = styled.button`
        background: ${props => (props.primary ? 'green' : 'white')};
        color: ${props => (props.primary ? 'white' : 'palevioletred')};
        font-size: 1em;
        margin: 1em;
        padding: 0.25em 1em;
        border: 2px solid palevioletred;
        border-radius: 3px;
    `;
    
    
    return (
        <div>


            <Button>哈哈哈哈</Button>

            <Button primary>啦啦啦啦</Button>
        </div>
    )
}

3.emotion

        Emotion 是一个流行的 CSS - in - JS 库,它提供了一种在 JavaScript 中编写 CSS 样式的高效方法,主要用于 React 等 JavaScript 框架中,但也可以在其他环境中使用。它的目标是让样式的编写更加灵活、高效且易于维护。

      Emotion有三种方式  1.@emotion/css  2.@emotion/react 3.@emotion/styled

安装:

        使用 npm 安装:npm install @emotion/react @emotion/styled @emotion/css

        使用 yarn 安装:yarn add @emotion/react @emotion/styled

         1.@emotion/css

                

import React from 'react';
import { css } from '@emotion/css';

export default function B() {
    const color = 'red';

    return (
        <div>
            <div
                className={css`
                    background-color: hotpink;
                    &:hover {
                        color: ${color};
                    }
                `}
            >
                This has a hotpink background.
            </div>
        </div>
    );
}

            2.@emotion/react

import React from 'react'
// import styled from 'styled-components';
import { css } from '@emotion/react';

export default function B() {

   let color='green'

    return (
        <div>
            <button css={css`
                &:hover{
                    color:${color};
                }`
            }>sdfsdfsdfs</button>

        </div>
    )
}

               3.@emotion/styled                 

import React from 'react'
// import styled from 'styled-components';
import styled from '@emotion/styled';

export default function B() {

   let Button=styled.button`
     color:red;
   `

    return (
        <div>
            <Button>dddddd</Button>
        </div>
    )
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值