Css 以角度(mat sidenav)由子元件替代父样式

Css 以角度(mat sidenav)由子元件替代父样式,css,angular,angular-material,Css,Angular,Angular Material,是否有方法覆盖某些内容组件中的侧导航内容样式 下面我方导航代码有余量:20px我只想被加载到内容部分的几个组件覆盖(例如:Map)。一种方法是删除边距并将其分别应用于除贴图之外的所有组件。但我想知道是否有一种方法可以提升样式层次结构并从子组件重写它。这是相反的方向\deep\ main { margin: 20px; } <mat-sidenav-container class="example-sidenav-container" autosize> &

是否有方法覆盖某些内容组件中的侧导航内容样式

下面我方导航代码有
余量:20px我只想被加载到内容部分的几个组件覆盖(例如:Map)。一种方法是删除边距并将其分别应用于除贴图之外的所有组件。但我想知道是否有一种方法可以提升样式层次结构并从子组件重写它。这是相反的方向
\deep\

main {
  margin: 20px;
}


<mat-sidenav-container class="example-sidenav-container" autosize>
<mat-sidenav [opened]="true" #sidenav [mode]="sideNavMode">
  <mat-nav-list>
    <sidenav-list-item *ngFor="let navitem of navigationItems" [collapsed]="sidenavOpened" [navItem]="navitem"></sidenav-list-item>
  </mat-nav-list>
</mat-sidenav>
<main>
  <ng-content></ng-content>
</main>
main{
利润率:20px;
}
这是我所说的一个例子。请参见地图组件。它应该覆盖父css。

最好的办法是将每个将修改边距的子级包装在:主机选择器中。在使用深度选择器时,您应该随时这样做

因此,在您需要修改的每个子组件中,您将执行以下操作:

:host {
  /deep/ mat-sidenav-container {
    margin: 10px;
  }
}
编辑:在你的情况下,我第一次误解了,直到我看到运行的代码!因此,当地图组件是侧导航内部的子组件时,您需要使用根目录下的
@at
引用来打破DOM树,并使用父组件来引用侧导航。大概是这样的:

:host {
  @at-root /deep/ .mat-drawer-inner-container {
    margin: 100px;
    background-color: blue;
  }
}

您需要将该
.css
文件更改为
.scss
,以使其正常工作。您需要对每个页面执行此操作,以使其成为“特殊的”。

您最好的选择是将每个将修改边距的子页面包装在:主机选择器中。在使用深度选择器时,您应该随时这样做

因此,在您需要修改的每个子组件中,您将执行以下操作:

:host {
  /deep/ mat-sidenav-container {
    margin: 10px;
  }
}
编辑:在你的情况下,我第一次误解了,直到我看到运行的代码!因此,当地图组件是侧导航内部的子组件时,您需要使用根目录下的
@at
引用来打破DOM树,并使用父组件来引用侧导航。大概是这样的:

:host {
  @at-root /deep/ .mat-drawer-inner-container {
    margin: 100px;
    background-color: blue;
  }
}

您需要将该
.css
文件更改为
.scss
,以使其正常工作。你需要对每一页都这样做,你想让它变得“特别”。

这是什么意思?有样品吗?”最好的办法是将每个修改边距的子对象包装在:主机选择器中。在使用深度选择器的任何时候,您都应该这样做。如果要复制该材质并修改任何材质组件,则该材质组件只会在该子组件中受影响。在子组件中尝试背景色:黑色或其他颜色,您将看到更改。请查看我创建的示例。我不能让它工作。谢谢你更新了我的答案。对不起,我没有马上回到这个话题上来。在root中使用Scss,您可以随时随地覆盖任何内容。使用构件样式替代角度中的深样式是错误的。您也可以用Javascript编写查询选择器。这是什么意思?有样品吗?”最好的办法是将每个修改边距的子对象包装在:主机选择器中。在使用深度选择器的任何时候,您都应该这样做。如果要复制该材质并修改任何材质组件,则该材质组件只会在该子组件中受影响。在子组件中尝试背景色:黑色或其他颜色,您将看到更改。请查看我创建的示例。我不能让它工作。谢谢你更新了我的答案。对不起,我没有马上回到这个话题上来。在root中使用Scss,您可以随时随地覆盖任何内容。使用构件样式替代角度中的深样式是错误的。您还可以用Javascript编写查询选择器。