[英]How to change the Angular Material 2 CSS imports order?
在使用Angular CLI構建的Angular 2應用程序中,我按照官方安裝指南設置了Angular 2 Material組件 。
Angular 2 Material將其主要CSS樣式放在頁面<head>
始終位於我的自定義CSS樣式之下 。 如果我需要覆蓋它們,這會對我產生影響。
如何強制Angular 2 Material將其核心CSS樣式置於我在Angular CLI main(entry)CSS文件中定義的樣式之上 ?
在root上的style.css文件中導入材質主題:
例如
@import "../node_modules/@angular/material/prebuilt-themes/indigo-pink.css";
你可以替換indigo-pink.css自己的選擇。
我認為您遇到的問題是由於在index.html中對您的css文件進行了一些引用,並且在angular-cli.json文件中有其他文件。
下面是我的angular.cli json文件和index.html的示例
無論你在index.html中定義了什么,都要在angular-cli.json文件中定義的內容之前。 如果要對它們重新排序,請在angular-cli.json文件中包含對所有css文件的引用。
請注意我的styles.css文件是angular-cli.json文件中列出的最后一個文件。
編輯(再次重讀原始問題后)
我認為你需要創建自己的自定義主題並導入它。
Per Angular Material的文檔
為了使用Angular Material的工具設置自己的組件樣式,必須使用Sass定義組件的樣式。
您只需要在custom-component-theme.scss中創建一個@mixin函數
我已經解決了加載視圖后加載自定義css。
export class AppComponent implements AfterViewInit {
ngAfterViewInit() {
this.linkExternalStyleSheet('assets/styles/custom-theme.css');
}
linkExternalStyleSheet(externalStyleSheetUrl: string) {
const overrideStyleSheet: any = document.getElementById('extStyleLink');
if (overrideStyleSheet) {
overrideStyleSheet.href = externalStyleSheetUrl;
} else {
const link = document.createElement('link');
link.id = 'extStyleLink';
link.rel = 'stylesheet';
link.type = 'text/css';
link.media = 'screen';
link.href = externalStyleSheetUrl;
document.getElementsByTagName('head')[0].appendChild(link);
}
}
}
是的,在Angular材質中,它會在元素/組件加載時動態添加實體CSS。 所以,你不能改變它的順序。
但是要解決您的問題,您可以使用CSS特異性來覆蓋它。 您可以在正文或app-component中添加自定義類,使用SCSS / CSS可以使用自己的CSS覆蓋材質CSS。
以下是使用SCSS的示例,用於更改復選框樣式。 和project__app
類名,我在app-component中提到過。 您也可以使用body代替它,或者在元素的父級上創建特定的類。
.project__app
{
/* checkbox customization */
.mat-checkbox-layout
{
margin-bottom: 0px;
}
.mat-checkbox-inner-container
{
height: 20px;
width: 20px;
}
.mat-checkbox-frame {
border-color: rgba(0, 0, 0, 0.5);
border-width: 1px;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.