亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
項目啟動會議
第零次沖刺:審查會議
第一次沖刺:審查會議
第二次沖刺:審查會議
結論
首頁 web前端 css教學 迭代使用樣式組件的React設計

迭代使用樣式組件的React設計

Apr 21, 2025 am 11:29 AM

Iterating a React Design with Styled Components

理想情況下,項目擁有無限資源和時間。團隊將使用經(jīng)過深思熟慮且高度優(yōu)化的UX 設計開始編碼。開發(fā)人員之間將就最佳樣式方法達成共識。團隊中將有一位或多位CSS 專家,他們可以確保功能和樣式可以同時推出,而不會變成一團糟。

我確實在大型企業(yè)環(huán)境中見過這種情況。這是一件美好的事情。本文不適用於這些人。

另一方面,小型初創(chuàng)公司資金為零,只有一到兩位前端開發(fā)人員,而且展示某些功能的時間非常短。它不必看起來完美,但至少應該在臺式機、平板電腦和移動設備上合理地呈現(xiàn)。這使他們能夠將其展示給顧問和早期用戶;甚至可能是對該概念表示感興趣的潛在投資者。一旦他們從銷售和/或投資中獲得一些現(xiàn)金流,他們就可以獲得專門的UX 設計師並改進界面。

以下內(nèi)容適用於後一組人員。

項目啟動會議

讓我們發(fā)明一家公司來啟動項目。

Solar Excursions 是一家小型旅行社,旨在服務於近未來蓬勃發(fā)展的太空旅遊業(yè)。

我們的小型開發(fā)團隊已同意將React 用於UI。我們的一位前端開發(fā)人員非常喜歡Sass,而另一位則迷戀於JavaScript 中的CSS。但是他們很難完成最初的衝刺目標;當然沒有時間爭論最佳的樣式方法。兩位編碼員都同意,從長遠來看,選擇並不重要,只要它得到一致執(zhí)行即可。他們確信,現(xiàn)在在壓力下從頭開始實現(xiàn)樣式將導致技術債務,以後必須清理。

經(jīng)過一番討論,團隊選擇規(guī)劃一個或多個“樣式重構”衝刺?,F(xiàn)在,我們將專注於使用React-Bootstrap 在屏幕上顯示一些內(nèi)容。這樣,我們就可以快速構建有效的桌面和移動佈局,而無需大費周章。

在前端樣式上花費的時間越少越好,因為我們還需要將UI 連接到我們的後端開發(fā)人員將要推出的服務。而且,隨著我們的應用程序架構開始成形,兩位前端開發(fā)人員都同意對其進行單元測試非常重要。他們有很多事情要做。

根據(jù)我與當權者的討論,作為一名專門的項目經(jīng)理,我至少在Balsamiq 上辛苦工作了十分鐘,為團隊提供了臺式機和移動設備上預訂頁面的模型。我認為他們將在中間滿足平板電腦的要求,並且看起來很合理。

第零次沖刺:審查會議

到處都是比薩餅!團隊非常努力地實現(xiàn)了其目標,我們現(xiàn)在有一個佈局近似於模型的預訂頁面。服務的架構正在形成,但在我們可以將其連接到UI 之前還有很長的路要走。在此期間,前端開發(fā)人員正在使用硬編碼的模擬數(shù)據(jù)結構。

以下是我們迄今為止的UI 代碼:

這都是簡單的React。我們正在使用一些Hooks 熱門技術,但對你們大多數(shù)人來說,這可能已經(jīng)過時了。

需要注意的關鍵要點是,我們的五個應用程序組件中有四個導入並使用了來自react-bootstrap 的組件。只有主要的App 組件不受影響。這是因為它只是使用我們的自定義組件組合頂級視圖。

 <code>// App.js imports import React, { useState } from "react"; import Navigation from "./Navigation"; import Page from "./Page"; // Navigation.js imports import React from "react"; import { Navbar, Dropdown, Nav } from "react-bootstrap"; // Page.js imports import React from "react"; import PosterCarousel from "./PosterCarousel"; import DestinationLayout from "./DestinationLayout"; import { Container, Row, Col } from "react-bootstrap"; // PosterCarousel.js imports import React from "react"; import { Alert, Carousel, Image } from "react-bootstrap"; // DestinationLayout.js imports import React, { useState, useEffect } from "react"; import { Button, Card, Col, Container, Dropdown, Jumbotron, ListGroup, Row, ToggleButtonGroup, ToggleButton } from "react-bootstrap";</code>

使用Bootstrap 快速行動的決定使我們能夠實現(xiàn)衝刺目標,但我們已經(jīng)在積累技術債務。這只是四個受影響的組件,但隨著應用程序的增長,很明顯,我們計劃的“樣式重構”衝刺將變得越來越困難。我們甚至沒有對這些組件進行太多自定義。一旦我們擁有數(shù)十個組件,所有組件都使用Bootstrap 並使用大量內(nèi)聯(lián)樣式來美化它們,將它們重構以刪除react-bootstrap 依賴項將是一個非常可怕的主張。

與其構建更多預訂管道頁面,團隊決定我們將花費下一個衝刺來隔離自定義組件工具包中的react-bootstrap 使用情況,因為我們的服務仍在構建中。應用程序組件將僅使用此工具包中的組件。這樣,當我們從react-bootstrap 中分離出來時,這個過程就會容易得多。我們不必在整個應用程序中重構三十個react-bootstrap Button 的用法,我們只需重寫KitButton 組件的內(nèi)部即可。

第一次沖刺:審查會議

好吧,這很容易。擊掌。 UI 的視覺外觀沒有變化,但我們現(xiàn)在有一個“kit”文件夾,它是我們React 源代碼中“components”的同級文件夾。它有很多文件,例如KitButton.js,它基本上導出重命名的react-bootstrap 組件。

我們工具包中的一個示例組件如下所示:

 <code>// KitButton.js import { Button, ToggleButton, ToggleButtonGroup } from "react-bootstrap"; export const KitButton = Button; export const KitToggleButton = ToggleButton; export const KitToggleButtonGroup = ToggleButtonGroup;</code>

我們將所有工具包組件打包到這樣的模塊中:

 <code>// kit/index.js import { KitCard } from "./KitCard"; import { KitHero } from "./KitHero"; import { KitList } from "./KitList"; import { KitImage } from "./KitImage"; import { KitCarousel } from "./KitCarousel"; import { KitDropdown } from "./KitDropdown"; import { KitAttribution } from "./KitAttribution"; import { KitNavbar, KitNav } from "./KitNavbar"; import { KitContainer, KitRow, KitCol } from "./KitContainer"; import { KitButton, KitToggleButton, KitToggleButtonGroup } from "./KitButton"; export { KitCard, KitHero, KitList, KitImage, KitCarousel, KitDropdown, KitAttribution, KitButton, KitToggleButton, KitToggleButtonGroup, KitContainer, KitRow, KitCol, KitNavbar, KitNav };</code>

現(xiàn)在我們的應用程序組件完全沒有react-bootstrap。以下是受影響組件的導入:

 <code>// Navigation.js imports import React from "react"; import { KitNavbar, KitNav, KitDropdown } from "../kit"; // Page.js imports import React from "react"; import PosterCarousel from "./PosterCarousel"; import DestinationLayout from "./DestinationLayout"; import { KitContainer, KitRow, KitCol } from "../kit"; // PosterCarousel.js imports import React from "react"; import { KitAttribution, KitImage, KitCarousel } from "../kit"; // DestinationLayout.js imports import React, { useState, useEffect } from "react"; import { KitCard, KitHero, KitList, KitButton, KitToggleButton, KitToggleButtonGroup, KitDropdown, KitContainer, KitRow, KitCol } from "../kit";</code>

以下是我們現(xiàn)在的前端代碼庫:

儘管我們將所有react 導入都包含在我們的工具包組件中,但我們的應用程序組件仍然依賴於react-bootstrap 實現(xiàn),因為我們放置在工具包組件實例上的屬性與react-bootstrap 的屬性相同。這在重新實現(xiàn)工具包組件時會限制我們,因為我們需要遵守相同的API。例如:

 <code>// 來自Navigation.js<kitnavbar bg="dark" fixed="top" variant="dark"></kitnavbar></code>

理想情況下,當我們實例化KitNavbar 時,我們不必添加那些react-bootstrap 特定的屬性。

前端開發(fā)人員承諾在繼續(xù)進行時將這些屬性重構出來,因為我們已經(jīng)將它們識別為有問題的。任何對react-bootstrap 組件的新引用都將進入我們的工具包,而不是直接進入應用程序組件。

同時,我們將我們的模擬數(shù)據(jù)與服務器工程師共享,服務器工程師正在努力構建單獨的服務器環(huán)境、實現(xiàn)數(shù)據(jù)庫模式並向我們公開一些服務。

這給了我們時間在下一個衝刺中為我們的UI 添加一些光澤——這很好,因為當權者希望看到每個目的地的單獨主題。當用戶瀏覽目的地時,我們需要更改UI 配色方案以匹配顯示的旅行海報。此外,我們希望嘗試改進這些組件,以開始發(fā)展我們自己的外觀和感覺。一旦我們有一些收入,我們將請設計師進行全面檢修,但希望我們能夠為早期用戶找到一個合適的方案。

第二次沖刺:審查會議

哇!團隊在這個衝刺中確實竭盡全力。我們獲得了每個目的地的主題、自定義組件以及從應用程序組件中刪除了許多殘留的react-bootstrap API 實現(xiàn)。

以下是現(xiàn)在的桌面外觀:

為了實現(xiàn)這一點,前端開發(fā)人員引入了Styled Components 庫。它使為各個工具包組件設置樣式以及添加對多個主題的支持變得輕而易舉。

讓我們看看他們本衝刺中的一些亮點。

首先,對於導入字體和設置頁面正文樣式之類的全局內(nèi)容,我們有一個名為KitGlobal 的新工具包組件。

 <code>// KitGlobal.js import { createGlobalStyle } from "styled-components"; export const KitGlobal = createGlobalStyle` body { @import url('https://fonts.googleapis.com/css?family=Orbitron:500|Nunito:600|Alegreya Sans SC:700'); background-color: ${props => props.theme.foreground}; overflow-x: hidden; } `;</code>

它使用createGlobalStyle 輔助函數(shù)來定義body 元素的CSS。它從Google 導入我們所需的網(wǎng)絡字體,將背景顏色設置為當前主題的“前景”值,並關閉x 方向上的溢出以消除討厭的水平滾動條。我們在App 組件的render 方法中使用KitGlobal 組件。

同樣在App 組件中,我們從../theme 導入ThemeProvider 來自styled-components,以及名為“themes”的內(nèi)容。我們使用React 的useState 將初始主題設置為themes.luna,並使用React 的useEffect 在“destination”更改時調(diào)用setTheme。返回的組件現(xiàn)在包裝在ThemeProvider 中,後者將“theme”作為prop 傳遞。以下是完整的App 組件。

 <code>// App.js import React, { useState, useEffect } from "react"; import { ThemeProvider } from "styled-components"; import themes from "../theme/"; import { KitGlobal } from "../kit"; import Navigation from "./Navigation"; import Page from "./Page"; export default function App(props) { const [destinationIndex, setDestinationIndex] = useState(0); const [theme, setTheme] = useState(themes.luna); const destination = props.destinations[destinationIndex]; useEffect(() => { setTheme(themes[destination.theme]); }, [destination]); return (<themeprovider theme="{theme}"><react.fragment><kitglobal></kitglobal><navigation destinationindex="{destinationIndex}" setdestinationindex="{setDestinationIndex}"></navigation><page destinationindex="{destinationIndex}" setdestinationindex="{setDestinationIndex}"></page></react.fragment></themeprovider> ); }</code>

KitGlobal 像任何其他組件一樣呈現(xiàn)。那裡沒有什麼特別的,只是body 標籤受到影響。 ThemeProvider 使用React Context API 將主題傳遞給任何需要它的組件(所有組件)。為了完全理解這一點,我們還需要看看主題究竟是什麼。

為了創(chuàng)建一個主題,我們的一位前端開發(fā)人員獲取了所有旅行海報,並通過提取突出的顏色為每個海報創(chuàng)建調(diào)色板。這相當簡單。

顯然,我們不會使用所有顏色。該方法主要是將最常用的兩種顏色命名為前景和背景。然後我們又取了三種顏色,通常從最淺到最深排列為accent1、accent2 和accent3。最後,我們選擇了兩種對比色來命名text1 和text2。對於上述目的地,這看起來像:

 <code>// theme/index.js (部分列表) const themes = { ... mars: { background: "#a53237", foreground: "#f66f40", accent1: "#f8986d", accent2: "#9c4952", accent3: "#f66f40", text1: "#f5e5e1", text2: "#354f55" }, ... }; export default themes;</code>

一旦我們?yōu)槊總€目的地創(chuàng)建了一個主題,並且它被傳遞到所有組件(包括我們的應用程序組件現(xiàn)在從中構建的工具包組件),我們就需要使用styled-components 來應用這些主題顏色以及我們的自定義視覺樣式,例如面板角和“邊框輝光”。

這是一個簡單的示例,我們讓KitHero 組件將主題和自定義樣式應用於Bootstrap Jumbotron:

 <code>// KitHero.js import styled from "styled-components"; import { Jumbotron } from "react-bootstrap"; export const KitHero = styled(Jumbotron)` background-color: ${props => props.theme.accent1}; color: ${props => props.theme.text2}; border-radius: 7px 25px; border-color: ${props => props.theme.accent3}; border-style: solid; border-width: 1px; box-shadow: 0 0 1px 2px #fdb813, 0 0 3px 4px #f8986d; font-family: "Nunito", sans-serif; margin-bottom: 20px; `;</code>

在這種情況下,我們可以使用styled-components 返回的內(nèi)容,因此我們只需將其命名為KitHero 並導出即可。

當我們在應用程序中使用它時,它看起來像這樣:

 <code>// DestinationLayout.js (部分代碼) const renderHero = () => { return (<kithero></kithero></code><h2> {destination.header}</h2>
      <p>{destination.blurb}</p>
      <kitbutton>Book Your Trip Now!</kitbutton>
  );
};

然後還有更複雜的情況,我們希望預設react-bootstrap 組件上的一些屬性。例如,前面我們已經(jīng)確定KitNavbar 組件具有一堆我們寧願不從應用程序的組件聲明中傳遞的react-bootstrap 屬性。

現(xiàn)在讓我們看看是如何處理的:

 <code>// KitNavbar.js (部分代碼) import React, { Component } from "react"; import styled from "styled-components"; import { Navbar } from "react-bootstrap"; const StyledBootstrapNavbar = styled(Navbar)` background-color: ${props => props.theme.background}; box-shadow: 0 0 1px 2px #fdb813, 0 0 3px 4px #f8986d; display: flex; flex-direction: horizontal; justify-content: space-between; font-family: "Nunito", sans-serif; `; export class KitNavbar extends Component { render() { const { ...props } = this.props; return ; } }</code>

首先,我們使用styled-components 創(chuàng)建一個名為StyledBootstrapNavbar 的組件。我們可以使用傳遞給styled-components 的CSS 來處理一些屬性。但是,為了繼續(xù)利用(目前)組件對屏幕頂部的可靠粘性(而其他所有內(nèi)容都被滾動),我們的前端開發(fā)人員選擇繼續(xù)使用react-bootstrap 的fixed 屬性。為了做到這一點,我們必須創(chuàng)建一個KitNavbar 組件,該組件使用fixed=top 屬性呈現(xiàn)StyledBootstrapNavbar 的實例。我們還傳遞了所有props,其中包括它的子元素。

如果我們想通過默認值在工具包組件中顯式設置某些屬性,我們只需要創(chuàng)建一個單獨的類來呈現(xiàn)styled-component 的工作並將props 傳遞給它即可。在大多數(shù)情況下,我們只需命名和返回styled-component 的輸出並像上面對KitHero 所做的那樣使用它即可。

現(xiàn)在,當我們在應用程序的Navigation 組件中呈現(xiàn)KitNavbar 時,它看起來像這樣:

 <code>// Navigation.js (部分代碼) return (<kitnavbar><kitnavbarbrand><kitlogo></kitlogo> Solar Excursions</kitnavbarbrand> {renderDestinationMenu()}</kitnavbar> );</code>

最後,我們第一次嘗試將工具包組件從react-bootstrap 中重構出來。 KitAttribution 組件是一個Bootstrap Alert,就我們的目的而言,它只不過是一個普通的div。我們能夠輕鬆地重構以刪除其對react-bootstrap 的依賴性。

這是從上一個衝刺中出現(xiàn)的組件:

 <code>// KitAttribution.js (使用react-bootstrap) import { Alert } from "react-bootstrap"; export const KitAttribution = Alert;</code>

這就是它現(xiàn)在的樣子:

 <code>// KitAttribution.js import styled from "styled-components"; export const KitAttribution = styled.div` text-align: center; background-color: ${props => props.theme.accent1}; color: ${props => props.theme.text2}; border-radius: 7px 25px; border-color: ${props => props.theme.accent3}; border-style: solid; border-width: 1px; box-shadow: 0 0 1px 2px #fdb813, 0 0 3px 4px #f8986d; font-family: "Alegreya Sans SC", sans-serif; > a { color: ${props => props.theme.text2}; font-family: "Nunito", sans-serif; } > a:hover { color: ${props => props.theme.background}; text-decoration-color: ${props => props.theme.accent3}; } `;</code>

請注意,我們不再導入react-bootstrap,而是使用styled.div 作為組件基礎。它們不會都那麼容易,但這是一個過程。

以下是我們的團隊在本衝刺中進行的樣式和主題設計工作的結果:

在此處查看主題頁面本身。

結論

經(jīng)過三個衝刺後,我們的團隊正在順利構建UI 的可擴展組件架構。

  • 由於react-bootstrap,我們正在快速前進,但不再因此積累大量的技術債務。
  • 由於styled-components,我們能夠實現(xiàn)多個主題(就像如今互聯(lián)網(wǎng)上的幾乎每個應用程序都具有深色和淺色模式一樣)。我們也不再像一個現(xiàn)成的Bootstrap 應用程序了。
  • 通過實現(xiàn)一個包含所有對react-bootstrap 的引用的自定義組件工具包,我們可以根據(jù)需要進行重構。

在GitHub 上分叉最終代碼庫。

以上是迭代使用樣式組件的React設計的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
CSS教程,用於創(chuàng)建加載旋轉器和動畫 CSS教程,用於創(chuàng)建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉器的方法有三種:1.使用邊框的基本旋轉器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異並合理使用廠商前綴。 1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS並配置browserslist指定目標瀏覽器;6.構建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo????ntalpadding/margins—idealforinlinetextstyling

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應式調(diào)整,適配移動端;3.易於動畫化,可結合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響佈局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設置訪問過鏈接的樣式能提升用戶體驗,尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導航。 1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出於隱私限制僅允許修改部分屬性;3.顏色選擇應與整體風格協(xié)調(diào),避免突兀;4.移動端可能不顯示該效果,建議結合其他視覺提示如icon輔助標識。

如何使用CSS創(chuàng)建響應式圖像? 如何使用CSS創(chuàng)建響應式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應容器寬度;2.結合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控製圖片裁剪與焦點展示。這些方法共同確保圖片在不同設備上清晰、美觀地呈現(xiàn)。

什麼是常見的CSS瀏覽器不一致? 什麼是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對CSS解析存在差異,導致顯示效果不一致,主要包括默認樣式差異、盒模型計算方式、Flexbox和Grid佈局支持程度及某些CSS屬性行為不一致。 1.默認樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應多測試並使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse並提供降級

揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 Jul 08, 2025 am 02:16 AM

CSS單位的選擇取決於設計需求和響應式要求。 1.px用於固定尺寸,適合精確控制但缺乏彈性;2.em是相對單位,受父元素影響易導致級聯(lián)問題,rem則基於根元素更穩(wěn)定,適合全局縮放;3.vw/vh基於視口大小,適合響應式設計,但需注意極端屏幕下的表現(xiàn);4.選擇時應根據(jù)是否需要響應式調(diào)整、元素層級關係及視口依賴程度來決定,合理搭配使用可提升佈局靈活性與維護性。

See all articles