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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...