:host :host-context ::ng-deep詳解

:host 與 ::ng-deep

:host 表示選擇當前的組件。

::ng-deep 可以忽略中間className的嵌套層級關系。直接找到你要修改的className。

在使用一些第三方的組件的時候,要修改組件的樣式。
這種情況下使用:

:host ::ng-deep .className{新的樣式......
}
:host {background: #F1F1F1;overflow: hidden;padding: 24px;display: block;
}.card-container ::ng-deep .ant-tabs-card .ant-tabs-content {height: 120px;margin-top: -16px;
}

不過官方文檔上說,ng-deep 在未來的版本中將被放棄,不知道未來會變成什么樣的語法。使用的時候,記得為未來Angular升級帶來的變化做準備。

:host-context

::ng-deep當你沒有編寫組件并且無法訪問其源代碼時,通常需要這樣做,但是:host-context當你這樣做時,它可能是一個非常有用的選項.

例如,我<h1>在我設計的組件中有一個黑色標題,我希望能夠在黑暗的主題背景上顯示時將其更改為白色.

如果我無法訪問源代碼,我可能必須在父代的css中執行此操作:

.theme-dark widget-box ::ng-deep h1 { color: white; }

但相反,:host-context您可以在組件執行此操作.SCSS代碼

 h1 {color: black;       // default color:host-context(.theme-dark) &{color: white;   // color for dark-theme}// OR set an attribute 'outside' with [attr.theme]="'dark'":host-context([theme='dark']) &{color: white;   // color for dark-theme}}

這將查看組件鏈中的任何位置,.theme-dark如果找到,則將css應用于h1.這是一個很好的選擇,過分依賴::ng-deep,而往往是必要的反模式.

在這種情況下,它&被替換為h1(這就是sass/scss的工作方式),因此您可以將"正常"和主題/替代css緊挨著定義,這非常方便.

官網資料

特殊的選擇器

組件樣式中有一些從影子(Shadow) DOM 樣式范圍領域(記錄在W3C的CSS Scoping Module Level 1中) 引入的特殊選擇器

:host

使用?:host?偽類選擇器,用來選擇組件宿主元素中的元素(相對于組件模板內部的元素)。

src/app/hero-details.component.css

:host {display: block;border: 1px solid black;
}

:host?選擇是是把宿主元素作為目標的唯一方式。除此之外,你將沒辦法指定它, 因為宿主不是組件自身模板的一部分,而是父組件模板的一部分。

要把宿主樣式作為條件,就要像函數一樣把其它選擇器放在?:host?后面的括號中。

下一個例子再次把宿主元素作為目標,但是只有當它同時帶有?active?CSS 類的時候才會生效。

src/app/hero-details.component.css

:host(.active) {border-width: 3px;
}

:host-context

有時候,基于某些來自組件視圖外部的條件應用樣式是很有用的。 例如,在文檔的?<body>?元素上可能有一個用于表示樣式主題 (theme) 的 CSS 類,你應當基于它來決定組件的樣式。

這時可以使用?:host-context()?偽類選擇器。它也以類似?:host()?形式使用。它在當前組件宿主元素的祖先節點中查找 CSS 類, 直到文檔的根節點為止。在與其它選擇器組合使用時,它非常有用。

在下面的例子中,只有當某個祖先元素有 CSS 類?theme-light?時,才會把?background-color?樣式應用到組件內部的所有?<h2>?元素中。

src/app/hero-details.component.css

:host-context(.theme-light) h2 {background-color: #eef;
}

已廢棄?/deep/>>>?和?::ng-deep

組件樣式通常只會作用于組件自身的 HTML 上。

把偽類?::ng-deep?應用到任何一條 CSS 規則上就會完全禁止對那條規則的視圖包裝。任何帶有?::ng-deep?的樣式都會變成全局樣式。為了把指定的樣式限定在當前組件及其下級組件中,請確保在?::ng-deep?之前帶上?:host?選擇器。如果?::ng-deep?組合器在?:host?偽類之外使用,該樣式就會污染其它組件。

這個例子以所有的?<h3>?元素為目標,從宿主元素到當前元素再到 DOM 中的所有子元素:

src/app/hero-details.component.css

:host ::ng-deep h3 {font-style: italic;
}

/deep/?組合器還有兩個別名:>>>?和?::ng-deep

/deep/?和?>>>?選擇器只能被用在仿真 (emulated)?模式下。 這種方式是默認值,也是用得最多的方式。 更多信息,見控制視圖封裝模式一節。

CSS 標準中用于 "刺穿 Shadow DOM" 的組合器已經被廢棄,并將這個特性從主流瀏覽器和工具中移除。 因此,我們也將在 Angular 中移除對它們的支持(包括?/deep/>>>?和?::ng-deep)。 目前,建議先統一使用?::ng-deep,以便兼容將來的工具。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247327.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java生鮮電商平臺-緩存架構實戰

Java生鮮電商平臺-緩存架構實戰 說明&#xff1a;在Java生鮮電商中&#xff0c;緩存起到了非常重要的作用&#xff0c;目前整個項目中才用的是redis做分布式緩存. 緩存集群 緩存集群存在的問題 1.熱key 緩存集群中的某個key瞬間被數萬甚至十萬的并發請求打爆。 2.大value 某個k…

Java生鮮電商平臺-深入理解微服務SpringCloud各個組件的關聯與架構

Java生鮮電商平臺-深入理解微服務SpringCloud各個組件的關聯與架構 概述 毫無疑問&#xff0c;Spring Cloud是目前微服務架構領域的翹楚&#xff0c;無數的書籍博客都在講解這個技術。不過大多數講解還停留在對Spring Cloud功能使用的層面&#xff0c;其底層的很多原理&#xf…

Angular自學筆記(?)DI提供者

類提供者 類提供者的創建和使用 假設有logger類: import {Injectable } from @angular/core;@Injectable() export class LoggerService {logs: string[] = [

Angular自學筆記(?)生命周期

從實例化組件,渲染組件模板時,各聲明周期就已開始 ngOnChanges 輸入屬性發生變化是觸發,但組件內部改變輸入屬性是不會觸發的 import {Component, Input, OnInit, OnChanges } from @angular/core;@Component({selector: app-life-cycle,templateUrl:

[轉載]httpClient.execute拋Connection to refused異常問題

在4.0之后android采用了嚴格模式&#xff1a;所以在你得activity創建的時候&#xff0c;在super.onCreate(savedInstanceState);后面加上這個 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites(…

Angular自學筆記(?)依賴注入

什么是依賴注入 依賴注入(DI)是一種設計模式, 也有相應的框架,比如InversifyJS Angular 有自己的 DI 框架, DI 框架會在實例化該類時向其提供這個類所聲明的依賴項 帶修飾符的參數 在ts中,一個類的參數如果帶上修飾符,那個參數就變成了類的實例屬性 class Mobile {co…

MSN8.0經常出現連接錯誤,如何解決?

連接錯誤有很多種情形&#xff0c;請您先查看下連接錯誤代碼 然后可以嘗試以下解決辦法--------- 如何解決錯誤 81000301 或 81000306 您登錄 MSN Messenger 時&#xff0c;可能會收到以下錯誤消息&#xff1a; 我們無法讓您登錄到 MSN Messenger&#xff0c;可能是因為服務或 …

@ViewChild 的三種常用方法

//--1------ 在angular中進行dom操作 <div #dom>這是一個div</div> //放置一個錨點domimport { ElementRef, ViewChild } from angular/core;ViewChild(dom,{static:true}), eleRef:ElementRef; //static-True表示在運行更改檢測之前解析查詢結果&#xff0c;false…

SQL Server安裝文件掛起錯誤解決辦法

以前在安裝sql的時候&#xff0c;如此提示&#xff0c;我只要重新啟動即可&#xff0c;可是今天重新啟動了N次計算機&#xff0c;問題卻絲毫沒有解決&#xff0c;依然提示這樣的話。“以前的某個程序安裝已在安裝計算機上創建掛起的文件操作。運行安裝程序之前必須重新啟動計算…

angular 內容投影

app HTML <div class"wrapper"><h2>我是父組件</h2><div>這個div定義在父組件中</div><app-child><div class"header">這個div是父組件投影到子組件的1, {{title}}</div><div class"footer"…

移動端日歷插件

//datePicker日期控件 v1.0//var calendar new datePicker();//calendar.init({// trigger: #demo1, /*選擇器&#xff0c;觸發彈出插件*/// type: date,/*date 調出日期選擇 datetime 調出日期時間選擇 time 調出時間選擇 ym 調出年月選擇*/// minDate:1900-1-1,/*最小日期*/…

js 操作location URL對象進行操作

把location 創建URL對象 構造器 new URL() 創建并返回一個URL對象&#xff0c;該URL對象引用使用絕對URL字符串&#xff0c;相對URL字符串和基本URL字符串指定的URL。 屬性 hash 包含#的USVString&#xff0c;后跟URL的片段標識符。 host 一個USVString&#xff0c;其中…

aspx,ascx和ashx使用小結

做asp.net開發的對.aspx,.ascx和.ashx都不會陌生。關于它們&#xff0c;網上有很多文章介紹。“紙上得來終覺淺&#xff0c;絕知此事要躬行”&#xff0c;下面自己總結一下做個筆記。 1、.aspx Web窗體設計頁面。Web窗體頁由兩部分組成&#xff1a;視覺元素&#xff08;html、服…

vue3.x通過ref屬性獲取元素

在vue2.x中&#xff0c;可以通過給元素添加refxxx屬性&#xff0c;然后在代碼中通過this.$refs.xxx獲取到對應的元素 然而在vue3中時沒有$refs這個東西的&#xff0c;因此vue3中通過ref屬性獲取元素就不能按照vue2的方式來獲取vue3需要借助生命周期方法&#xff0c;原因很簡單…

vue3+TypeScript封裝echarts5組件

https://blog.csdn.net/qq_38330707/article/details/111497853 有用mark 等抽時間寫個vueTSecharts5.0的組件文章 寫個大概 帶 resize的 <template><div class"echarts" :id"id"></div> </template><script lang"ts&q…

How to Register COM in VS

在 Visual Studio .Net 部署項目中注冊 COM 模塊的步驟 將 COM 對象添加到 Visual Studio 部署項目。在解決方案資源管理器中&#xff0c;右鍵單擊剛添加的模塊&#xff0c;然后單擊屬性。注意&#xff1a;“屬性”窗口包含一個表&#xff0c;其中有兩列和 x 行&#xff08;行數…

css3 卡片hover3D效果

鼠標hover卡片 向上翻轉&#xff0c;看簡易代碼 <!DOCTYPE html> <html> <head><title>3D Flip Card hover effects</title><style type"text/css">* {margin: 0;padding: 0;font-family: consolas;box-sizing: border-box;}bo…

隨便貼兩個漏洞,如 Apache JServ協議服務

1、Apache JServ協議服務 描述&#xff1a;Apache JServ協議&#xff08;AJP&#xff09;是一種二進制協議&#xff0c;可以將來自Web服務器的入站請求代理到 位于Web服務器后面的應用程序服務器。不建議在互聯網上公開使用AJP服務。 如果AJP配置錯誤&#xff0c;可能會允許攻擊…

vue3學習筆記 Composition API setup

一、Composition API優勢 相對于vue2的option API Vue3的Composition API設計更有優勢 Composition(組合式)Api 功能分組 Composition(組合式)Api 功能導入復用 組合式Api 所解決的問題 (1) 更好的代碼組織結構 (2) 相同的代碼邏輯可以進行復用 home.vue 3種方式遞進升級…

【TCP傳輸數據-鍵盤錄入】

package com.yjf.esupplier.common.test;import java.io.*; import java.net.Socket;/*** author shusheng* description TCP 傳輸數據:鍵盤錄入* Email shushengyiji.com* date 2019/1/15 22:57*/ public class ClientDemo1 {public static void main(String[] args) throws I…