md-option 元素在悬停和选择时更改外观和行为

Posted

技术标签:

【中文标题】md-option 元素在悬停和选择时更改外观和行为【英文标题】:md-option elements change appearance and behaviour on hover and select 【发布时间】:2017-08-04 11:00:48 【问题描述】:

我正在使用md-selectmd-option 生成语言选择器下拉菜单。因此,我们不仅显示语言字符串,还使用flag-icon-css 来显示相应的国家/地区标志。

在这种情况下,我遇到了一种我认为带有md-select 元素的意外行为。即md-select 元素被正确渲染,除了已经被选中的元素和你用鼠标悬停的元素。

我们在后台使用 typescript 类,其中包含所需的信息,html 如下所示:

  <md-select ng-model="login.selectedLanguage" class="lang-select login.selectedLanguage">
    <md-option ng-repeat="lang in login.languages" value="lang.langKey" ng-click="login.changeLang(lang.langKey)" class="lang-option">
      lang.text
    </md-option>
  </md-select> 

我们还使用封装在sass 文件中的css 类,其中设置了相应的标志。 注意:这里我省略了 md-select 本身的 css 类,因为它按预期工作。

@mixin flag($country)
  background-image: url('#$ROOT/bower_components/flag-icon-css/flags/4x3/#$country.svg')

.lang-select
  margin-top: 22px

.lang-option
  padding-left: 50px
  background: no-repeat 10px center
  background-size: 30px 20px
  text-transform: none

.lang-option[value="de_DE"]
  +flag('de')

.lang-option[value="en_EN"]
  +flag('gb')

.lang-option[value="fr_FR"]
  +flag('fr')

就像我之前所说的,每次我悬停一个元素时,标志都会消失,看起来它已经移出下拉菜单的范围,因为我确信当我悬停时我可以注意到标志向左上角的轻微移动。结果如下所示:

在图中,我当前将鼠标悬停在 english 上,法语 (Francais) 是当前选定的元素。

我无法在小提琴中重现整个设置,因为我不知道如何整合我们的 sass 代码。

因此,我小提琴中的标志是硬编码标签,不会在悬停或选择时消失。但是您可以在小提琴中看到的是 md-select 的默认行为默认更改了悬停项目的背景。我相信这正是使我们的标志消失的相同功能。 Please try the fiddle for yourself.

我当然有可能弄错了,我的 css 代码对这种行为负责。但我没有实现任何悬停代码。如果我弄错了,请告诉我。

所以问题是我如何抑制这种行为以便始终在md-option 中显示标志?

更新:

在我设置background-position: center 之后,似乎更清楚的是所有这一切背后都有某种动画,因为我现在可以看到标志是如何从容器范围之外滑入的。

问候


【问题讨论】:

【参考方案1】:

我相信这不起作用,因为您正在通过 CSS 设置 background-image 属性,并且在悬停/选择 Angular Material 时会更改元素的背景。

您可能做的实际上与您在小提琴中所做的相同。除了在 md-option 元素上设置背景图像之外,您还可以在其中添加一个 span 并将其应用到那里:

<md-option ng-repeat="lang in login.languages" value="lang.langKey" ng-click="login.changeLang(lang.langKey)" class="lang-option">
  <span class="flag-container"></span> lang.text
</md-option>

不熟悉 SASS 语法,所以我用纯 CSS 编写。你会明白我的意思:)

.lang-option[value="de_DE"] .flag-container 
    background-image: url('PATH-TO-DE-FLAG.svg')

希望这能解决你的问题:)

【讨论】:

以上是关于md-option 元素在悬停和选择时更改外观和行为的主要内容,如果未能解决你的问题,请参考以下文章

悬停一个元素时更改所有其他元素的样式

当另一个子div悬停时,更改子div的外观

如何在 chrome 中更改 <input type=date> 的外观

在 Bootstrap 中更改悬停效果和字段选择的样式

悬停元素时更改背景

在悬停另一个元素时更改 SVG 填充颜色