目錄
跟踪窗口寬度
響應式樣式
標題
高級功能和可重複性
結論
首頁 web前端 css教學 設計系統中的嵌套組件

設計系統中的嵌套組件

Mar 13, 2025 am 11:42 AM

設計系統中的嵌套組件

建造可重複使用的響應式前端組件,尤其是具有嵌套結構的組件,提出了重大挑戰。本文探討了一種避免過多的媒體查詢和重複樣式的陷阱的解決方案。

考慮一個簡單的呼籲行動(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>
登入後複製

此外,通過提取可重複使用的組合物來管理響應行為和道具驗證,可以顯著改善代碼。 useResponsivewithResponsiveProps ComposableS旨在證明這一點。

結論

此方法為構建響應式組件系統提供了更強大,更可維護的解決方案。通過利用JavaScript和CSS類,它可以最大程度地減少代碼重複,提高一致性,並為處理複雜的響應佈局和嵌套組件提供更大的靈活性。

以上是設計系統中的嵌套組件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

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整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

See all articles