angularjs 如何在Angular中更改before/after的样式?

b1zrtrql  于 2024-01-05  发布在  Angular
关注(0)|答案(5)|浏览(250)

我正在尝试在CSS中使用before/after实现带有三角形的面包屑,如本教程所示:
http://css-tricks.com/triangle-breadcrumbs/
相关片段:

  1. <ul class="breadcrumb">
  2. <li><a href="#">Home</a></li>
  3. </ul>
  4. .breadcrumb li a {
  5. color: white;
  6. text-decoration: none;
  7. padding: 10px 0 10px 65px;
  8. background: hsla(34,85%,35%,1);
  9. position: relative;
  10. display: block;
  11. float: left;
  12. }
  13. .breadcrumb li a:after {
  14. content: " ";
  15. display: block;
  16. width: 0;
  17. height: 0;
  18. border-top: 50px solid transparent;
  19. border-bottom: 50px solid transparent;
  20. border-left: 30px solid hsla(34,85%,35%,1);
  21. position: absolute;
  22. top: 50%;
  23. margin-top: -50px;
  24. left: 100%;
  25. z-index: 2;
  26. }

字符串
但是,我将其用作定向流,类似于:
首页_分类>>子分类>>详细信息
这个流程开始时Main_Category高亮显示,其他两个部分是暗的,下面有一个可以选择的部分。选择时,Sub_Category高亮显示,另一个部分弹出。
如果它们是伪元素,我如何更改前/后边框颜色?
所以从教程中,我认为可以在主要部分做到这一点:

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


但是我没有地方可以为before/after设置 ng-style,三角形的颜色最终没有改变。

im9ewurl

im9ewurl1#

如果我对你的问题理解正确的话,你想知道如何使用一个angular指令来动态地设置before/after伪标记的样式。
不要使用ng-style,而是使用ng-class来附加一个类,这个类将确定要使用哪个before/after伪类。

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

字符串
在CSS中:

  1. .breadcrumb li a:after {
  2. content: " ";
  3. display: block;
  4. width: 0;
  5. height: 0;
  6. border-top: 50px solid transparent;
  7. border-bottom: 50px solid transparent;
  8. border-left: 30px solid hsla(34,85%,35%,1);
  9. position: absolute;
  10. top: 50%;
  11. margin-top: -50px;
  12. left: 100%;
  13. z-index: 2;
  14. }
  15. .breadcrumb li a.color-0:after {
  16. background: black;
  17. }
  18. .breadcrumb li a.color-1:after {
  19. background: blue;
  20. }

展开查看全部
zlhcx6iw

zlhcx6iw2#

其他的答案不允许你基于控制器变量的值来设计元素的样式,这个答案可以!
使用@HostBinding来定义CSS变量,然后您可以在.scss文件中使用这些变量,从而非常容易地动态设置:before:after的样式。
.ts:

  1. size = 10
  2. padding = 2
  3. @HostBinding('attr.style')
  4. public get cssVars() {
  5. return `
  6. --switch-size: ${this.size};
  7. --switch-padding: ${this.padding};
  8. --switch-size-inner: ${this.size - this.padding * 2};
  9. `;
  10. }

字符串
.scss:

  1. .my-class:before {
  2. height: calc(var(--switch-size) * 1px);
  3. }


注意:有些人在使用这种方法时使用DomSanitizer,但我认为没有必要(没有它也能工作)-参见https://stackoverflow.com/a/64252610/1205871

展开查看全部
8yoxcaq7

8yoxcaq73#

在这种情况下,我会避免使用ng-style,你可能会发现使用ng-class并应用不同的类更容易,这将允许你将所有的CSS放在一个地方,而不是在HTML中覆盖。
只需将您的代码更改为:

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

字符串
其中subCategory应该是一个布尔值,在单击时设置subCategory,然后它将添加breadcrumb-color作为类值,你应该得到这样的结果:

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


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

  1. .breadcrumb-color li a {
  2. background: red;
  3. }
  4. .breadcrumb-color li a:after {
  5. background: red;
  6. }

展开查看全部
2hh7jdfx

2hh7jdfx4#

ng-class应该为你想做的事情工作。

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

字符串
粗编码example

kmynzznz

kmynzznz5#

您可以在CSS中定义颜色:

  1. .breadcrumb li a.main-category {
  2. background: hsla(34, 85%, 35%, 1);
  3. }
  4. .breadcrumb li a.main-category:after {
  5. border-left-color: hsla(34, 85%, 35%, 1);
  6. }
  7. .breadcrumb li a.sub-category {
  8. background: hsla(44, 75%, 45%, 1);
  9. }
  10. .breadcrumb li a.sub-category:after {
  11. border-left-color: hsla(44, 75%, 45%, 1);
  12. }
  13. /* ... and so on for other categories */

字符串
然后使用ngClass:

  1. <ul class="breadcrumb">
  2. <li><a href="#" ng-class="{'main-category': isMainCategoryActive(), 'sub-category': isSubCategoryActive()}">Home</a></li>
  3. <!-- ... other breadcrumbs -->
  4. </ul>


在您的控制器中设置上述功能。

  1. $scope.isMainCategoryActive = function() {
  2. // Your logic to determine if main category is active
  3. return true; // Or false
  4. };
  5. $scope.isSubCategoryActive = function() {
  6. // Your logic to determine if sub category is active
  7. return false; // Or true
  8. };

展开查看全部

相关问题