<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    前端最全的5種換膚方案總結(jié)

    共 4765字,需瀏覽 10分鐘

     ·

    2024-04-11 22:03

    點(diǎn)擊關(guān)注公眾號(hào),“技術(shù)干貨” 及時(shí)達(dá)!


    最近一年很多客戶要求更換主題色,而團(tuán)隊(duì)的項(xiàng)目基礎(chǔ)框架不一,因此幾乎使用了所有的更換主題的方案。以下總結(jié)了各方案的實(shí)現(xiàn)以及優(yōu)缺點(diǎn),希望能幫助有需要更換主題色的伙伴少踩坑。

    方案一:硬編碼

    對一些老的前端基礎(chǔ)庫和業(yè)務(wù)庫樣式?jīng)]有提取公共樣式,當(dāng)有更換主題的需求,實(shí)現(xiàn)的方法只能是全局樣式替換,工作量比較大,需要更改form表單、按鈕、表格、tab、容器等所有組件的各種狀態(tài),此外還需更換icon圖標(biāo)。

    以下是我們的一個(gè)老項(xiàng)目實(shí)現(xiàn)主題色更換,全局樣式替換接近500行,如下圖所示:

    image.png
    image.png
    image.png

    「總結(jié):」 對于這種老項(xiàng)目只能通過硬編碼的方式去更改,工作量較大,好在老項(xiàng)目依賴同一個(gè)基礎(chǔ)庫和業(yè)務(wù)庫,所以在一個(gè)項(xiàng)目上實(shí)現(xiàn)了也可以快速推廣到其它項(xiàng)目。

    方案二:sass變量配置

    團(tuán)隊(duì)的基礎(chǔ)組件庫Link-ui是基于Eelement-ui二次開發(fā),因此可以采取類似于Element-ui的方式進(jìn)行主題更改,只需要設(shè)計(jì)師提供6個(gè)主題色即可完成主題色的更改,如下所示。

    image.png
    • 配置基礎(chǔ)色 基礎(chǔ)色一般需要設(shè)計(jì)師提供,也可以通過配置化的方式實(shí)現(xiàn),
    $--color-primary-bold: #1846D1 !default;
    $--color-primary: #2664FD !default;
    $--color-primary-light: #4D85FD !default;
    $--color-primary-light-1: #9AC0FE !default;
    $--color-primary-light-2: #C1DBFF !default;
    $--color-primary-lighter: #E8F2FF !default;

    • 從基礎(chǔ)庫安裝包引入基礎(chǔ)色和庫的樣式源文件
    @import "./common/base_var.scss";

    /* 改變 icon 字體路徑變量,必需 */
    $--font-path: '~link-ui-web/lib/theme-chalk/fonts';

    @import "~link-ui-web/packages/theme-chalk/src/index";
    • 全局引入
    import '@/styles/link-variables.scss';
    • 更換主題色 只需要更改上面的6個(gè)變量即可實(shí)現(xiàn)主題色的更改,比如想改成紅色,代碼如下
    $--color-primary-bold: #D11824 !default;
    $--color-primary: #FD268E !default;
    $--color-primary-light: #D44DFD !default;
    // $--color-primary-light-1: #9AC0FE !default;
    $--color-primary-light-2: #DCC1FF !default;
    $--color-primary-lighter: #F1E8FF !default;
    image.png

    「總結(jié):」 對于基礎(chǔ)庫和樣式架構(gòu)設(shè)計(jì)合理的項(xiàng)目更改主題色非常的簡單,只要在配置文件更換變量的值即可。它的缺點(diǎn)是sass變量的更改每次都需要編譯,很難實(shí)現(xiàn)配置化。

    方案三、css變量+sass變量+data-theme

    代碼結(jié)構(gòu)如下:

    image.png
    • 設(shè)計(jì)三套主題分別定義不同的變量(包含顏色、圖標(biāo)和圖片)
      // theme-default.scss
    /* 默認(rèn)主題色-合作藍(lán)色 */
    [data-theme=default] {
    --color-primary: #516BD9;
    --color-primary-bold: #3347B6;

    --color-primary-light: #6C85E1;
    --color-primary-light-1: #C7D6F7;
    --color-primary-light-2: #c2d6ff;
    --color-primary-lighter: #EFF4FE;

    --main-background: linear-gradient(90deg,#4e68d7, #768ff3);

    --user-info-content-background-image: url();
    --msg-tip-content-background-image: url();
    ...
    }

      // theme-orange.scss
    // 陽光黃
    [data-theme=orange] {
    --color-primary: #FF7335;
    --color-primary-bold: #fe9d2e;

    --color-primary-light: #FECB5D;
    --color-primary-light-1: #FFDE8B;
    --color-primary-light-2: #fcdaba;
    --color-primary-lighter: #FFF3E8;

    --main-background: linear-gradient(90deg,#ff7335 2%, #ffa148 100%);


    --user-info-content-background-image: url();
    --msg-tip-content-background-image: url();
    ...
    }

      // theme-red.scss
    /* 財(cái)富紅 */
    [data-theme=red] {
    --color-primary: #DF291E;
    --color-primary-bold: #F84323;

    --color-primary-light: #FB8E71;
    --color-primary-light-1: #FCB198;
    --color-primary-light-2: #ffd1d1;
    --color-primary-lighter: #FFEEEE;


    --main-background: linear-gradient(90deg,#df291e 2%, #ff614c 100%);

    --user-info-content-background-image: url();
    --msg-tip-content-background-image: url();
    ...
    }

    • 把主題色的變量作為基礎(chǔ)庫的變量
    $--color-primary-bold: var(--color-primary-bold) !default;
    $--color-primary: var(--color-primary) !default;
    $--color-primary-light: var(--color-primary-light) !default;
    $--color-primary-light-1: var(--color-primary-light-1) !default;
    $--color-primary-light-2: var(--color-primary-light-2) !default;
    $--color-primary-lighter: var(--color-primary-lighter) !default;
    • App.vue指定默認(rèn)主題色
    window.document.documentElement.setAttribute('data-theme''default')

    data-theme會(huì)注入到全局的變量上,所以我們可以在任何地方獲取定義的css變量

    image.png

    實(shí)現(xiàn)效果如下:

    image.png
    image.png
    image.png

    「總結(jié):」 該方案是最完美的方案,但是需對顏色、背景圖、icon等做配置,需設(shè)計(jì)師設(shè)計(jì)多套方案,工作量相對較大,適合要求較高的項(xiàng)目或者標(biāo)準(zhǔn)產(chǎn)品上面,目前我們的標(biāo)準(zhǔn)產(chǎn)品選擇的是該方案。

    方案四:濾鏡filter

    filter CSS屬性將模糊或顏色偏移等圖形效果應(yīng)用于元素。濾鏡通常用于調(diào)整圖像,背景和邊框的渲染。

    它有個(gè)屬性hue-rotate() 用于改變圖整體色調(diào),設(shè)定圖像會(huì)被調(diào)整的色環(huán)角度值。值為0deg展示原圖,大于360deg相當(dāng)于又繞一圈。用法如下:

    body {
        filterhue-rotate(45deg);
    }

    產(chǎn)品新建UI單元測試運(yùn)行錄制.gif

    「總結(jié):」 成本幾乎為0,實(shí)現(xiàn)簡單。缺點(diǎn)是對于某些圖片或者不想改的顏色需要特殊處理。

    方案五:特殊時(shí)期變灰

    • filter還有個(gè)屬性 grayscale() 改變圖像灰度,值在 0% 到 100% 之間,值為0%展示原圖,值為100% 則完全轉(zhuǎn)為灰度圖像。
    body {
        filtergrayscale(1);
    }
    image.png

    「總結(jié):」 成本小,可以將該功能做成配置項(xiàng),比如配置它的生效開始時(shí)間和生效結(jié)束時(shí)間,便于運(yùn)營維護(hù)也不用頻繁發(fā)布代碼。

    總結(jié)

    以上就是實(shí)現(xiàn)換膚的全部方案,我們團(tuán)隊(duì)在實(shí)際項(xiàng)目都有使用,比較好推薦的方案是方案一、方案三、方案五,對于要求不高的切換主題推薦方案四,它的技術(shù)零成本,對于標(biāo)準(zhǔn)產(chǎn)品推薦方案三。如有更好的方案歡迎評(píng)論區(qū)交流。

    點(diǎn)擊關(guān)注公眾號(hào),“技術(shù)干貨” 及時(shí)達(dá)!



    瀏覽 24
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    水蜜桃AV无码 | 欧美一级片免费在线 | 亚洲天堂一区二区三区 | 日逼日逼日逼 | 日韩精品毛片在线 |