建造可重複使用的響應式前端組件,尤其是具有嵌套結構的組件,提出了重大挑戰。本文探討了一種避免過多的媒體查詢和重複樣式的陷阱的解決方案。
考慮一個簡單的呼籲行動(CTA)組件。在較小的屏幕上,我們想要一個緊湊的佈局:[緊湊型CTA的說明性圖像將進入此處]。簡單的媒體查詢可以實現這一目標,但是嵌套組件會引起問題。例如,如果CTA中的按鈕已經具有全寬功能,則將媒體查詢應用於父重複樣式。
這個問題隨著更複雜的嵌套而升級,導致大量代碼重複和維護頭痛。更改全寬按鈕樣式將需要在多個位置進行更新。需要一個更優雅的解決方案。儘管容器查詢具有潛力,但它們並未完全滿足基於屏幕尺寸動態調整各種組件道具的需求。
本文提出了一種不同的方法:利用組件道具和JavaScript來控制響應式樣式。
跟踪窗口寬度
我們首先跟踪窗口寬度並定義斷點。此示例使用VUE組合:
// composables/use breakpoints.js 從“ Vue”導入{Readonly,Ref}; const bps = ref({xs:0,sm:1,md:2,lg:3,xl:4}); const current breakpoint = ref(bps.xl); 導出默認值()=> { const update breakpoint =()=> { const windowwidth = window.innerwidth; // ...(原始文章中的斷點邏輯)... }; 返回{CurrentRablePoint:ReadOnly(CurrentRablePoint),BPS:READONLY(BPS),UPDATE BRAKERKPOINT}; };
此組合可用於App.vue
偵聽調整大小事件:
// app.vue 從“@/composable/use breakpoints”中導入use breakpoints; 從'vue'導入{on已完成,onunmounted}; 導出默認{ // ... 設定() { const {update breakpoint} = usebreakpoints(); on mounted(()=> { update breakpoint(); window.addeventListener('resize',update breakpoint); }); onunmounted(()=> { window.removeeventlistener('resize',update breakpoint); }); } };
(注意:辯論將改善生產環境中的性能。)
響應式樣式
修改了CTA組件以接受displayMode
Prop:
//組件/cta.vue <template> <div :class="`cta ${mode}`"> <div class="cta-content"> <h5 id="標題">標題</h5> <p>描述</p> </div> <btn :block="mode === 'compact'">繼續</btn> </div> </template> <script> import Btn from "@/components/ui/Btn"; import { useResponsive, withResponsiveProps } from "@/composables/useResponsive"; export default { name: "CTA", components: { Btn }, props: withResponsiveProps(['default', 'compact'], {}), setup(props) { const { mode } = useResponsive(props); return { mode }; } }; </script> <style scoped> .cta { display: flex; align-items: center; &.compact { flex-direction: column; .cta-content { margin-right: 0; margin-bottom: 2rem; } } } </style>
該mode
是基於currentBreakpoint
確定的:
<cta :display-mode="currentBreakpoint.value > bps.md ? 'default' : 'compact'"></cta>
這消除了組件中媒體查詢的需求。
高級功能和可重複性
該方法擴展到更複雜的方案,例如恢復到先前的斷點或在頁面上使用不同的模式。 customMode
Prop允許進行每個斷點模式規範:
<cta :custom-mode="['compact', 'default', 'compact']"></cta>
此外,通過提取可重複使用的組合物來管理響應行為和道具驗證,可以顯著改善代碼。 useResponsive
和withResponsiveProps
ComposableS旨在證明這一點。
結論
此方法為構建響應式組件系統提供了更強大,更可維護的解決方案。通過利用JavaScript和CSS類,它可以最大程度地減少代碼重複,提高一致性,並為處理複雜的響應佈局和嵌套組件提供更大的靈活性。
以上是設計系統中的嵌套組件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

對於Astro,我們可以在構建過程中生成大部分網站,但是有一小部分服務器端代碼可以使用Fuse.js之類的搜索功能來處理搜索功能。在此演示中,我們將使用保險絲搜索一組個人“書籤”


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

WebStorm Mac版
好用的JavaScript開發工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版