內建瀏覽器 <style> 元件 可讓您將 inline CSS 樣式表新增至您的文件中。
<style>{` p { color: red; } `}</style>參考
<style>
要將 inline 樣式新增至您的文件,請渲染內建瀏覽器 <style> 元件。您可以從任何元件渲染 <style>,React 會在某些情況下將對應的 DOM 元素放置在文件 head 中,並刪除重複的相同樣式。
<style>{` p { color: red; } `}</style>屬性
<style> 支援所有 常用元件屬性。
children:字串,必填。樣式表的內容。precedence:字串。告訴 React<style>DOM 節點相對於文件中其他<head>中的節點的排名,這決定了哪個樣式表可以覆蓋另一個樣式表。React 將推斷它先發現的優先順序值「較低」,而它後發現的優先順序值「較高」。許多樣式系統可以使用單個優先順序值正常工作,因為樣式規則是原子性的。具有相同優先順序的樣式表會放在一起,無論它們是<link>還是 inline<style>標籤,或者使用preinit函式載入。href:字串。允許 React 對具有相同href的樣式進行重複資料刪除。media:字串。將樣式表限制為 特定的媒體查詢。nonce:字串。使用嚴格的內容安全策略時,允許資源的加密 nonce。title:一個字串。指定替代樣式表的名稱。
不建議與 React 一起使用的屬性
blocking:一個字串。如果設為"render",則指示瀏覽器在樣式表載入完成之前不要渲染頁面。React 使用 Suspense 提供更細緻的控制。
特殊渲染行為
React 可以將 <style> 元件移動到文件的 <head> 中,移除重複的樣式表,並在樣式表載入時暫停。
要啟用此行為,請提供 href 和 precedence 屬性。如果樣式表具有相同的 href,React 將會移除重複的樣式。precedence 屬性告訴 React <style> DOM 節點相對於文件中其他 <head> 中節點的排名,這決定了哪個樣式表可以覆蓋另一個樣式表。
這種特殊處理方式有兩個注意事項
- 樣式渲染後,React 將忽略對屬性的更改。(如果發生這種情況,React 將在開發過程中發出警告。)
- 即使渲染樣式的元件已被卸載,React 仍可能將樣式保留在 DOM 中。
用法
渲染內嵌 CSS 樣式表
如果元件需要某些 CSS 樣式才能正確顯示,您可以在元件內渲染內嵌樣式表。
如果您提供 href 和 precedence 屬性,則在樣式表載入時,您的元件將會暫停。(即使使用內嵌樣式表,由於樣式表引用的字體和圖像,仍可能會有載入時間。) href 屬性應唯一標識樣式表,因為 React 將移除具有相同 href 的樣式表。
import ShowRenderedHTML from './ShowRenderedHTML.js'; import { useId } from 'react'; function PieChart({data, colors}) { const id = useId(); const stylesheet = colors.map((color, index) => `#${id} .color-${index}: \{ color: "${color}"; \}` ).join(); return ( <> <style href={"PieChart-" + JSON.stringify(colors)} precedence="medium"> {stylesheet} </style> <svg id={id}> … </svg> </> ); } export default function App() { return ( <ShowRenderedHTML> <PieChart data="..." colors={['red', 'green', 'blue']} /> </ShowRenderedHTML> ); }