色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

用CSS變量創(chuàng)建有角度的材質(zhì)主題

呂致盈1年前7瀏覽0評論

我正在做一個(gè)需要在運(yùn)行時(shí)可主題化的項(xiàng)目。所以我創(chuàng)建了一個(gè)結(jié)合了SCSS變量和CSS變量的主題系統(tǒng)。 這是它看起來的樣子。

:root {
  --primary-color: 196;
}


// Primary
$primary-100: hsl(var(--primary-color), 90%, 98%);
$primary-400: hsl(var(--primary-color), 90%, 65%);
$primary-main: hsl(var(--primary-color), 90%, 50%);
$primary-700: hsl(var(--primary-color), 90%, 30%);
$primary-900: hsl(var(--primary-color), 90%, 10%);

雖然這與我的定制組件驚人地工作,但我很難讓它與材料設(shè)計(jì)主題系統(tǒng)一起工作。

我的想法是,我將創(chuàng)建的角度材料文件解釋的主題,而不是使用靜態(tài)的顏色,我將使用我的SCSS變量。這是我的theme.scss文件的樣子。

@import '~@angular/material/theming';
@import 'var.scss';

@include mat-core();

$shop-primary: (
  50: $primary-100,
  100: $primary-100,
  200: $primary-200,
  300: $primary-300,
  400: $primary-400,
 // ..... all other colors
  contrast: (
    50: $black-87-opacity,
    100: $black-87-opacity,
    200: $black-87-opacity,
     // ..... all other colors
  )
);


$shop-app-primary: mat-palette($shop-primary);
$shop-app-accent:  mat-palette($shop-primary);
$shop-app-warn: mat-palette($shop-primary);


$shop-app-theme: mat-light-theme($shop-app-primary, $shop-app-accent, $shop-app-warn);

@include angular-material-theme($shop-app-theme);

我得到一個(gè)錯(cuò)誤:

Argument `$color` of `rgba($color, $alpha)` must be a color

大概是因?yàn)橛薪嵌鹊牟馁|(zhì)混合需要的是顏色而不是hsl()值。

所以我的問題是,我如何能夠用運(yùn)行時(shí)CSS變量創(chuàng)建一個(gè)自定義的材質(zhì)主題?

我創(chuàng)建了一個(gè)小小的庫來簡化這個(gè)過程。

你可以這樣使用它:

安裝:

npm i angular-material-css-vars -S

然后移除任何現(xiàn)有的@ import ' ~ @ angular/material/theming ';從主樣式表文件中。

將它添加到主樣式表中:

@import '~angular-material-css-vars/main';
@include initMaterialCssVars();

像這樣改變主題顏色:

import {MaterialCssVarsService} from 'angular-material-css-vars';

export class SomeComponentOrService {
  constructor(public materialCssVarsService: MaterialCssVarsService) {
    const hex = '#3f51b5';
    this.materialCssVarsService.changePrimaryColor(hex);
  }
}

如果您升級到@angular/ material 7.3.4,CSS變量將大部分工作。只有撕裂和其他使用不透明的東西需要一點(diǎn)修復(fù)。我在我的項(xiàng)目中使用rgba(),但是它也應(yīng)該適用于hsla()

包括這個(gè):

@function mat-color($palette, $hue: default, $opacity: null) {
    @if type-of($hue) == number and $hue >= 0 and $hue <= 1 {
        @return mat-color($palette, default, $hue);
    }

    $color: map-get($palette, $hue);

    @if (type-of($color) != color) {
        @if ($opacity == null){
            @return $color;
        }

        // Here is the change from the original function:
        // If the $color resolved to something different from a color, we assume it is a CSS variable
        // in the form of rgba(var(--rgba-css-var),a) and replace the 'a' value.
        @return #{str-slice($color, 0, str-index($color, ',')) + $opacity + ')'};
    }

    @return rgba($color, if($opacity == null, opacity($color), $opacity));
}

緊隨其后:

@import '~@angular/material/theming';

像這樣定義你的顏色:

--primary-color-50-parts: 0,158,224;
// ... all other colors

$color-primary: (
    50: rgba(var(--primary-color-50-parts), 1),
    // ... all other colors
);

如果您像這樣定義地圖中的顏色:

50: hsla(var(--primary-color), 90%, 98%, 1);

然后,您需要將sass函數(shù)中的str-index($color,',')改為在字符串中找到最后一個(gè)','。不幸的是,我的sass知識只涵蓋了最低限度,我不知道如何做到這一點(diǎn):/

我創(chuàng)建了一個(gè)小小的圖書館-材料-主題-創(chuàng)建器

你可以為你的angular應(yīng)用程序設(shè)置主題,或者使用這種方法來創(chuàng)建主題

https://www.npmjs.com/package/material-theme-creator NPM

醫(yī)生:https://artik-man.github.io/material-theme-creator/

npm i材料-主題-創(chuàng)作者

@import "~material-theme-creator/ngx-mtc";
@import '~@angular/material/theming';

@include mat-core();
@include ngx-mtc-init();

$primary-map: ngx-mtc-create-theme-map('primary');
$accent-map: ngx-mtc-create-theme-map('accent');
$warn-map: ngx-mtc-create-theme-map('warn');

:root {
  --is-dark-theme: 1; // Is dark theme? 1 or 0;
  @include ngx-mtc-theme-base(); // Creates base colors

  // Creates theme colors
  @include ngx-mtc-create-variables-from-color('primary', #009688, 38%);
  @include ngx-mtc-create-variables-from-color('accent', #2196f3, 57%);
  @include ngx-mtc-create-variables-from-color('warn', #f44336, 62%);
}

// Creates Angular Material Theme
@include angular-material-theme(
  ngx-mtc-custom-theme(
    mat-palette($primary-map),
    mat-palette($accent-map),
    mat-palette($warn-map)
  )
);

第二個(gè)主題代碼:

.second-theme {
  --is-dark-theme: 0;
  @include ngx-mtc-update-theme('primary', #142148, 45%);
  @include ngx-mtc-update-theme('accent', #658e14, 50%);
  @include ngx-mtc-update-theme('warn', #750101, 50%);
}

你可以使用它與角材料或SCSS或純CSS

這是相當(dāng)容易實(shí)現(xiàn)的。

根據(jù)themes.scss文件中的角度調(diào)板,為“主要”、“強(qiáng)調(diào)”和“警告”定義調(diào)板和變量。見此供參考。

@import '@angular/material/theming';
@include mat.core();

$dark-primary-text: rgba(black, 0.87);
$dark-secondary-text: rgba(black, 0.54);
$dark-disabled-text: rgba(black, 0.38);
$dark-dividers: rgba(black, 0.12);
$dark-focused: rgba(black, 0.12);
$light-primary-text: white;
$light-secondary-text: rgba(white, 0.7);
$light-disabled-text: rgba(white, 0.5);
$light-dividers: rgba(white, 0.12);
$light-focused: rgba(white, 0.12);

$primary-var-palette: (
  50: var(--primary-50, #fafafa),
  100: var(--primary-100, #f5f5f5),
  200: var(--primary-200, #eeeeee),
  300: var(--primary-300, #e0e0e0),
  400: var(--primary-400, #bdbdbd),
  500: var(--primary-500, #9e9e9e),
  600: var(--primary-600, #757575),
  700: var(--primary-700, #616161),
  800: var(--primary-800, #424242),
  900: var(--primary-900, #212121),
  A100: var(--primary-A100, #ffffff),
  A200: var(--primary-A200, #eeeeee),
  A400: var(--primary-A400, #bdbdbd),
  A700: var(--primary-A700, #616161),
  contrast: (
    50: $dark-primary-text,
    100: $dark-primary-text,
    200: $dark-primary-text,
    300: $dark-primary-text,
    400: $dark-primary-text,
    500: $light-primary-text,
    600: $light-primary-text,
    700: $light-primary-text,
    800: $light-primary-text,
    900: $light-primary-text,
    A100: $dark-primary-text,
    A200: $light-primary-text,
    A400: $light-primary-text,
    A700: $light-primary-text,
  )
);

然后將調(diào)色板添加到主題中。

$var-primary: mat.define-palette($primary-var-palette);
$var-accent:  mat.define-palette($accent-var-palette, 400, 900, A100);
$var-warn:    mat.define-palette($warn-var-palette);
$var-theme: mat.define-light-theme($var-primary, $var-accent, $var-warn);
@include mat.all-component-themes($var-theme);

你不能在html中設(shè)置或改變css變量,所以要?jiǎng)討B(tài)地改變主題。

document.documentElement.style.setProperty('--primary-50', myPrimary50Value);
...

非常...css變量是運(yùn)行時(shí)的,不是編譯時(shí)的。薩斯不知道該拿他們怎么辦。您應(yīng)該能夠使用${ } Scss插值來重構(gòu)您的CSS變量,并保持一切工作不變。http://sass-lang.com/documentation/file.SASS _ REFERENCE.html #插值_

$primary-color: 196;

:root {
  --primary-color: #{$primary-color};
}

$primary-100: hsl($primary-color, 90%, 98%);