如何在Angular中更改之前/之后的样式?

Posted

技术标签:

【中文标题】如何在Angular中更改之前/之后的样式?【英文标题】:How to change style for before/after in Angular? 【发布时间】:2014-08-21 08:15:00 【问题描述】:

我正在尝试在 CSS 中使用 before/after 实现带有三角形的面包屑,如本教程所示:

http://css-tricks.com/triangle-breadcrumbs/

相关sn-ps:

<ul class="breadcrumb">
    <li><a href="#">Home</a></li>
</ul>

.breadcrumb li a 
    color: white;
    text-decoration: none; 
    padding: 10px 0 10px 65px;
    background: hsla(34,85%,35%,1); 
    position: relative; 
    display: block;
    float: left;


.breadcrumb li a:after  
    content: " "; 
    display: block; 
    width: 0; 
    height: 0;
    border-top: 50px solid transparent;           
    border-bottom: 50px solid transparent;
    border-left: 30px solid hsla(34,85%,35%,1);
    position: absolute;
    top: 50%;
    margin-top: -50px; 
    left: 100%;
    z-index: 2; 

但是,我将其用作定向流,例如:

Main_Category >> Sub_Category >> 详情

此流程开始时 Main_Category 突出显示,其他 2 个部分变暗,您可以从中进行选择。选择时,Sub_Category 会突出显示并弹出另一个。

我的问题是如果它们是伪元素,如何更改之前/之后的边框颜色?所以从教程中,我认为可以在主要部分做到这一点:

<li><a href="#" ng-style="background: color">Home</a></li>

但是我没有地方可以为之前/之后设置 ng-style,并且三角形颜色最终保持不变。

【问题讨论】:

我想看到一个直接解决这个问题的答案。使用类并不总是合适的。例如,我可能有大量元素需要根据项目 ID 更改背景图像。 【参考方案1】:

如果我正确理解了您的问题,您想知道如何使用角度指令来动态设置之前/之后伪标签的样式。

不使用 ng-style,而是使用 ng-class 附加一个类,该类将确定使用哪个 before/after 伪类。

<ul class="breadcrumb">
     <li><a href="#" ng-class="someBooleanInScope? 'color-0' : 'color-1'">Home</a></li>
</ul>

在 CSS 中:

.breadcrumb li a:after  
    content: " "; 
    display: block; 
    width: 0; 
    height: 0;
    border-top: 50px solid transparent;           
    border-bottom: 50px solid transparent;
    border-left: 30px solid hsla(34,85%,35%,1);
    position: absolute;
    top: 50%;
    margin-top: -50px; 
    left: 100%;
    z-index: 2; 


.breadcrumb li a.color-0:after 
    background: black;


.breadcrumb li a.color-1:after 
    background: blue;

【讨论】:

太棒了,唯一的小改动是“背景:黑色;”到“左边框颜色:黑色;”非常感谢!【参考方案2】:

我会避免在这种情况下使用 ng-style,您可能会发现使用 ng-class 并根据情况应用不同的类更容易,这将允许您将所有 CSS 保存在一个地方,而不是在 html 中覆盖。

只需将您的代码更改为:

<li><a href="#" ng-class=" 'breadcrumb-color': subCategory ">Home</a></li>

subCategory 应该是一个布尔值,点击你设置 subCategory 然后它会添加面包屑颜色作为类值,你最终应该是这样的:

<li><a href="#" class="breadcrumb-color">Home</a></li>

一些示例css,现在你可以随意设置之前和之后:

.breadcrumb-color li a 
    background: red;


.breadcrumb-color li a:after  
    background: red;

【讨论】:

【参考方案3】:

ng-class 应该适用于您正在尝试做的事情。

 <li><a href="#" ng-style="ng-class="beforeCSS: amIBeforeElement()"">Home</a></li>

粗略代码example

【讨论】:

以上是关于如何在Angular中更改之前/之后的样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS 更改 Angular-UI Bootstrap Datepicker 弹出窗口的样式?

如何更改 Angular Material select 中的滚动条样式?

如何在悬停内容之前更改样式组件[emotion.js,样式组件]

如何在 Angular 2 中动态更改 :host 中的 CSS?

如何通过单击外部按钮在 agggrid 中动态更改样式?

如何在离开页面之前警告用户未保存的表单更改? - 角度 6