首頁 > 軟體

React css-in-js基礎介紹與應用

2022-09-30 14:00:29

1. 介紹

CSS-in-JS 是一種技術,而不是一個具體的庫實現。簡單來說 CSS-in-JS 就是將應用的CSS樣式寫在 JavaScript 檔案裡面,而不是獨立為一些 css,scss 或 less 之類的檔案,這樣你就可以在 CSS 中使用一些屬於JS的諸如模組宣告,變數定義,函數呼叫和條件判斷等語言特性來提供靈活的可延伸的樣式定義。CSS-in-JS 在 React 社群的熱度是最高的,這是因為 React 本身不會管使用者怎麼去為元件定義樣式的問題,而 Vue 有屬於框架自己的一套定義樣式的方案。

styled-components 應該是 CSS-in-JS 最熱門的一個庫,通過 styled-components,你可以使用 ES6 的標籤模板字串語法,為需要 styled 的 Component 定義一系列 CSS 屬性,當該元件的 JS 程式碼被解析執行的時候,styled-components 會動態生成一個 CSS 選擇器,並把對應的 CSS 樣式通過 style 標籤的形式插入到 head 標籤裡面。動態生成的 CSS 選擇器會有一小段雜湊值來保證全域性唯一性來避免樣式發生衝突。

在react專案中,可以讓樣式命名不衝突的方案

  • 定義樣式名稱時,就讓它唯一
  • 使用內建的cssModule
  • css-in-js 把css當作js來使用

2. 使用

首先需要安裝相關包:

yarn add styled-components

使用:

App.jsx:

import React, { Component } from 'react'
import Child from './components/Child-07-樣式'
class App extends Component {
  render() {
    return (
      <div>
        <Child />
      </div>
    )
  }
}
export default App

Child.jsx:

import React, { Component } from 'react'
// 匯入樣式元件
import { ChildContainer, TitleContainer, SubTitleContainer, ContentContainer } from './style'
class Child extends Component {
  render() {
    return (
      <ChildContainer>
        {/* <TitleContainer>我是一個child元件</TitleContainer> */}
        {/* 巢狀使用 */}
        <div className="title">我是一個child元件</div>
        <SubTitleContainer>我是一個副標題</SubTitleContainer>
        <hr />
        {/* 屬性傳遞 */}
        <ContentContainer color='#00f' size="20">
          我是內容
        </ContentContainer>
      </ChildContainer>
    )
  }
}
export default Child

style.js:

// 使用css-in-js技術方案完成 react專案中的樣式編寫
// styled-components把樣式當作元件來定義和使用,樣式就是元件,元件就是樣式
import styled from 'styled-components'
// 語法
// export const ChildContainer = styled.html標籤名`樣式`
export const ChildContainer = styled.div`
  /* 在此字串模板中,寫css就可以了 */
  font-size: 30px;
  color:#f0f;
  /* 巢狀定義 */
  .title{
    font-size:18px;
  }
`
export const TitleContainer = styled.div`
  color:red;
  font-size:18px;
`
// 樣式繼承
export const SubTitleContainer = styled(TitleContainer)`
  font-size:14px;
`
// 在樣式中獲取樣式元件中的屬性資訊
export const ContentContainer = styled.div`
  color:${props => props.color || '#888'};
  font-size: ${props => props.size || 12}px;
`

到此這篇關於React css-in-js基礎介紹與應用的文章就介紹到這了,更多相關React css-in-js內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com