2017-02-09 22 views
6

我一直在閱讀這個選擇器,並得到相互矛盾的答案。在Angular 2中使用/ deep /和>>>

在:What do /deep/ and ::shadow mean in a CSS selector?

我們看到:

喬爾H.在評論中指出,Chrome已經因爲棄用 /深/組合子,它給在IE語法錯誤。

在:https://github.com/Microsoft/vscode/issues/7002

我們看到:

/深/不再存在,所以我不認爲我們應該支持。 >>>是 新的版本,這可能應該支持

然而,在角2個文檔:https://angular.io/docs/ts/latest/guide/component-styles.html

我們看到:

的/深/選擇器也有別名>>>。我們可以互換使用兩個 。

顯然,信任Angular 2文檔是明智的做法,但由於所有這些衝突信息,我都有點猶豫。

事實上,在最新版本的Microsoft Visual Studio Code中,儘管兩者都可以工作,儘管存在錯誤,但兩者都會產生錯誤。

我的問題是雙重的:

  1. 是/深/在這裏留下來?我們是否有任何資料來源,報價或任何來自任何說明文件將被採納的內容?或者如果它已被正式棄用?

  2. 我們可以在Visual Studio代碼中禁止這種錯誤,而不用全部禁用語法檢查嗎?

回答

9
  1. 是/深/在這裏留下來?我們是否有任何資料來源,報價或任何來自任何說明文件將被採納的內容?或者如果它已被正式棄用?

    /deep/語法是過時了,最後一次出現在CSS-作用域in 2014,而其替代>>>大約半年前被廢棄在Chrome 45

    陰影刺穿後裔組合子的整個概念是slated to be removed from the Shadow DOM entirely。實現可以將其完全移除或將其別名到常規後代組合器(這取決於Shadow DOM如何在未來實現可能有意義或無意義)。

  2. 我們可以在Visual Studio代碼中禁止這種錯誤,而不用全部禁用語法檢查嗎?

    不幸的不是。

    Angular允許在模擬視圖封裝以達到兼容性目的,但強烈建議作者繼續使用>>>,因爲/deep/現在在技術上無效,因此在本機視圖封裝中不受支持。

+1

如果我們不應該使用陰影刺穿後代組合器,那麼我們如何編寫規則在哪裏我們想要陰影穿透? – 2017-08-31 12:17:47

+0

要麼不封裝(封裝:ViewEncapsulation.None),要麼不穿透:) – craigmichaelmartin

2

根據谷歌文檔,所有主流瀏覽器都將棄用該功能的所有功能。因此,陰影穿孔後代組合器已被棄用,並且正在從主流瀏覽器和工具中刪除支持。

https://angular.io/guide/component-styles

什麼可以使用更offiical而不是deprecaed是::主持人()和::主持人上下文

另外,根據谷歌:: NG-深不會被棄用並將繼續成爲可行的選擇。所以使用:: ng-deep將是首選。

/deep/combinator也具有別名>>>和:: ng-deep。

僅在模擬視圖封裝時使用/ deep /,>>>和:: ng-deep。仿真是默認和最常用的視圖封裝。有關更多信息,請參閱控制視圖封裝部分。 不贊成使用陰影刺穿後代組合器,並且正在從主流瀏覽器和工具中刪除支持。因此,我們計劃放棄對Angular的支持(所有3個/ deep /,>>>和:: ng-deep)。在此之前:: ng-deep應該更適合與工具的更廣泛的兼容性。

+0

我想它在文檔中說':: ng-deep'也將被棄用。引用你的答案中的文字(強調我的):「因此,我們計劃放棄對Angular的支持(**/deep /,>>>和:: ng-deep的所有3 **)。」_或我錯過了什麼嗎? –