将鼠标悬停在所有列表项上,但指定的项除外

时间:2018-10-29 11:13:02

标签: javascript css angular typescript

在Angular 2+中,有什么方法可以按照Angular代码的指定在列表项上停止悬浮CSS功能?

我在这里有一个stackblitz,以显示我所谈论的简单示例。

我正在使用ngClass功能将样式动态应用于当时选择的任何列表项,因为这会改变(任何时候只能选择一项)。

<ul>
  <li id="{{item.name}}" *ngFor="let item of list" [ngClass]="{disableThis: item.selected}">{{item.name}}</li>
</ul>

我已经研究过CSS应用程序的:not()功能,但是我找不到一种将其用于数据插值的方法。

即:

.myElement:hover:not({{listItem.name}}) {
  background: green;
  color: white;
} 

3 个答案:

答案 0 :(得分:1)

app.component.ts

  items = {
    name: 'name',
    lang: ['php', 'javascript', 'angular']
  };

app.component.html

<ul>
 <li id="{{item.name}}" class="items" *ngFor="let item of items.lang">{{item}}</li>
</ul>

app.component.css或app.component.scss

// 1
.items:not(:first-of-type):hover {
  color: red;
}

// 2
.items:not(:last-of-type):hover {
  color: red;
}

// 3
.items:not(:first-child):hover {
  color: red;
}

// 4
.items:not(:last-child):hover {
  color: red;
}

// 5 by index of item
.items:not(:nth-child(2)):hover {
  color: red;
}

// 6 by index of item
.items:not(:nth-child(3)):hover {
  color: red;
}

通过选择器ID


app.component.ts

items = [
    {
      id: 'php',
      lang: 'php'
    },
    {
      id: 'angular',
      lang: 'angular'
    },
    {
      id: 'css',
      lang: 'css'
    }
  ];

app.component.html

<ul>
    <li id="{{ item.id }}" class="items" *ngFor="let item of items">{{item.lang}}</li>
</ul>

app.component.css或app.component.scss

.items:not(#angular):hover {
  color: red;
}

// Or
.items:not(#php):hover {
  color: red;
}

// Or
.items:not(#css):hover {
  color: red;
}

答案 1 :(得分:0)

如果停止悬停取决于附加了类disableThis的特定元素,则只需修改CSS即可:

.disableThis,
.disableThis:hover {
  background: grey;
  color: white;
}

答案 2 :(得分:0)

@Tushar在当天的简短评论中赢得了胜利:

  

选择器应为.myElement:not(.disableThis):hover {。假定myElement类应用于所有li元素。

这对我以及在我从中提取代码的更大项目中都起作用。