React 組件之樣式

来源:https://www.cnblogs.com/hubert-style/archive/2023/11/23/17852134.html
-Advertisement-
Play Games

無論你的夢想有多麼高遠,記住,一切皆有可能。 我們從前面的學習知道一個 React 組件不僅僅只包含 DOM 結構的,還應該樣式和 Javascript 邏輯的。這裡我們學習下如何構建 CSS 樣式。 1. 邏輯表示 JSX 中使用大括弧語法來包裹 JS 表達式(簡單邏輯代碼)。例如: { 1 + ...


無論你的夢想有多麼高遠,記住,一切皆有可能。

我們從前面的學習知道一個 React 組件不僅僅只包含 DOM 結構的,還應該樣式和 Javascript 邏輯的。這裡我們學習下如何構建 CSS 樣式。

1. 邏輯表示

JSX 中使用大括弧語法來包裹 JS 表達式(簡單邏輯代碼)。例如:

{ 1 + 1 }
{ 表達式/對象/變數/常量 }

2. 樣式表示

React 推薦使用行內樣式,因為 React 認為每一個組件都是一個獨立的整體。具體樣式參考文檔:

https://www.runoob.com/css/css-tutorial.html

2.1 行內樣式

想給虛擬 DOM 添加行內樣式,需要使用表達式傳入樣式對象的方式實現,註意這裡兩個括弧,第一個表示我們要在 JSX 里插入 JS 了,第二個是樣式對象的括弧:

import React, { Component } from "react"
import "./1-style.css"

class StyleApp extends Component {
  render() {
    return (
      <div>
        { 1+2 }
        {/* 行內樣式 */}
        <div style={{backgroundColor: "red"}}>行內樣式第一行數據</div>
        {/* 支持外部 CSS 文件 */}
        {/* class => className JSX 寫法區別 JS 中關鍵字類 class */}
        <div className="active">外部CSS文件樣式第二行數據:使用類選擇器</div>
        {/* 使用 id 選擇器 */}
        <div id="body">外部CSS文件樣式第三行數據:使用id選擇器</div>

        {/* for => htmlFor JSX 寫法,同理 class 關鍵字 */}
        <label htmlFor="username">用戶名:</label>
        <input type="text" id="username"/>
      </div>
    )
  }
}

export default StyleApp

2.2 外部 CSS 文件

語法格式和示例:

選擇器 {
    屬性名1: 屬性值1,
    屬性名2: 屬性值2,
    ...
}
// CSS 文件
.active {
  background: orange;
}

#body {
  background: green;
}

CSS 導入原理:

webpack 將 CSS 文件轉換成內部樣式,加到 style 中,並插到插入到頁面的 head 標簽里。

import "./1-style.css"

3. 樣式描述語言

3.1 CSS

CSS(Cascading Style Sheets,層疊樣式表) 文件主要的用途是對網頁中字體、顏色、背景、圖像及其他各種樣式元素的控制,使網頁能夠完全按照設計者的要求來顯示。

3.2 Less

Less 是一門 CSS 預處理語言,它擴充了 CSS 語言,增加了諸如變數、混合、函數等功能,讓 CSS 更易維護、方便製作主題、擴充。

Less 文件最終需要編譯成 CSS 文件進行樣式的渲染,不過相對比與 CSS,Less 提供了一些額外的功能將有效提高我們開發的效率。

兩者之間的區別:

變數:Less 允許單獨定義一系列通用的變數,然後在需要的時候去進行調用, 方便更改,提高了代碼的復用。示例:

@color: red;
.one{
  color:@color;
}
.two{
  color:@color;
}
.one{
  color:red;
}
.two{
  color:red;
}

嵌套:Less 可以使用一個選擇器嵌套另外一個選擇器,減少代碼量。

運算:Less 中提供了加,減,乘,除操作;我們可以做屬性值和顏色的運算,這樣就可以實現屬性值之間的複雜關係。示例:

@color: #333333;
.one{
  color:@color+#111111;
}

3.3 Sass

Sass 是一款強化 CSS 的輔助工具,它在 CSS 語法的基礎上增加了變數 (variables)、嵌套 (nested rules)、混合 (mixins)、導入 (inline imports) 等高級功能,這些拓展令 CSS 更加強大與優雅。使用 Sass 以及 Sass 的樣式庫(如 Compass)有助於更好地組織管理樣式文件,以及更高效地開發項目。

Less 和 Sass 如何選擇:

https://so66.cn/102540.html

4. CSS Module 模塊化

CSS 是層疊樣式表(Cascading Style Sheets)的簡稱。用於渲染 HTML 式樣的。 CSS 的讀取是有自己的規則的,從右至左。當項目大點,類名相同時,難免會發生覆蓋。從代碼中看,明明已經設置了,但是為什麼不起作用呢?為瞭解決這種問題,於是有了 CSS Modules 方案。

CSS 的模塊化,這樣的方式可以區分各個組件的樣式,不會相互覆蓋,而且還能定義偽類,React 腳手架當中內置了 CSS Modules 的配置,我們可以直接將 CSS 的文件定義為 xxx.module.css,在 xxx.module.css 文件中,還是按照以前的 CSS 編寫方式編寫,不同點在於 jsx 頁面中定義 className,先引入該 css 文件,然後定義類名以對象的形式定義:

import style from './index.module.css'
return(<div className={style.title}>
    hello react
</div>)

這樣定義的樣式是一個不會重覆的字元。這種定義樣式的方式能夠比較有效的解決樣式重疊的問題,麻煩之處就是每次編寫樣式的時候需要通過對象的語法來定義,並且不支持動態的設置樣式。

其次上面提到到 Less(Leaner Style Sheets 的縮寫) 是一門向後相容的 CSS 擴展語言。也可以解決上面提到的覆蓋問題。

5. styles-components

它是通過 JavaScript 改變 CSS 編寫方式的解決方案之一,從根本上解決常規 CSS 編寫的一些弊端。通過 JavaScript 來為 CSS 賦能,我們能達到常規 CSS 所不好處理的邏輯複雜、函數複雜、函數方法、復用、避免干擾。樣式書寫將直接依附在 JSX 上面,HTML、CSS、JS 三者再次內聚。all in js 的思想。模塊安裝如下:

npm i styled-components

5.1 基礎應用

style.label 會在原生組件基礎上生成一個帶樣式的組件,原生組件本身的屬性還是存在的,可以透傳給組件內部。

import styled from 'styled-components'

export default class StyleComponent extends Component {
  render() {
    const StylesLebel = styles.label`
      background: red    
    `
    return (
      <div>
        <StylesLebel>StyleComponent</StylesLebel>
      </div>
    )
  }
}

5.2 透傳 props

import styled from 'styled-components'

export default class StyleComponent extends Component {
 render() {
   const StylesLebel = styles.label`
     background: ${props=>props.bg}    
   `
   return (
     <div>
       <StylesLebel bg="red"></StylesLebel>
     </div>
   )
 }
}

5.3 樣式化組件

import styled from 'styled-components'

export default class StyleComponent extends Component {
  render() {
    const StylesChild = styles(Child)`
      background: red  
    `
    return (
      <div>
        <StylesChild></StylesChild>
      </div>
    )
  }
}


function Child(props) {
  return <div className={props.className}>Child</div>
}

5.4 樣式擴展

const MyButton = styled.button`
background: yellow;`

const BigButton = styled(MButton)`
height: 100px;
width: 100px;`

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL中的LIKE運算符用於在WHERE子句中搜索列中的指定模式。通常與LIKE運算符一起使用的有兩個通配符: 百分號 % 代表零個、一個或多個字元。 下劃線 _ 代表一個單個字元。 以下是LIKE運算符的用法和示例: 示例 選擇所有以字母 "a" 開頭的客戶: SELECT * FROM Cust ...
  • 1. 資料庫文件組成 主數據文件 主要數據文件的建議文件擴展名是 .mdf。 主要數據文件包含資料庫的啟動信息,並指向資料庫中的其他文件,存儲部分或全部的數據。用戶數據和對象可存儲在此文件中,也可以存儲在次要數據文件中。 每個資料庫有一個主要數據文件。 mdf文件並非普通文件,因此不藉助相應軟體是無 ...
  • 某大型央企是首批全國供應鏈創新與應用示範企業,在“十四五”規劃期內以聚焦供應鏈管理核心主業作為主要戰略發展方向。供應鏈運營管理以大宗商品貿易為主,其交易往往具有交易量巨大、交易環節複雜、風險交易難識別、風險客商難管控等痛點。 隨著集團數字化轉型不斷深化,數據應用方面的需求不斷擴展。但集團缺乏統一的大 ...
  • GeminiDB Redis介面現已支持可為Field設置過期時間和版本的exHash類型,對開源Redis的Hash類型進行了擴展。 ...
  • 分享一款用於分析iOSipa包的腳本工具,使用此工具可以自動掃描發現可修複的包體積問題,同時可以生成包體積數據用於查看。這塊工具我們團隊內部已經使用很長一段時間,希望可以幫助到更多的開發同學更加效率的優化包體積問題。 ...
  • 在併發隊列使用信號量會可能會造成線程優先順序反轉 一、在iOS16 & XCode14上遇到 - 使用信號量造成線程優先順序反轉問題 提醒 經過查詢資料,發現是在XCode14上增加了工具,比如 : Thread Performance Checker (XCode14上預設開啟的),這個工具會讓APP ...
  • 博客樣式設置 本博客皮膚設計來自一位超級大佬所做 大佬的GitHub項目地址:https://github.com/BNDong/Cnblogs-Theme-SimpleMemory 大佬的博客園地址:https://www.cnblogs.com/BNDong 第一步:獲取許可權 開通博客園賬號並且 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、你看得懂權威的解釋嗎? 1. CSS 規範中對 BFC 的描述 CSS 規範(英文) | 中文翻譯 浮動,絕對定位的元素,非塊盒的塊容器(例如inline-blocks,table-cells和table-captions),以及’o ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...