【问题标题】:Change select background image based on option attribute根据选项属性更改选择背景图像
【发布时间】:2019-06-18 04:01:06
【问题描述】:

我正在尝试编写一些SASS,它将根据所选内容更改选择框背景图像,但我不确定是否可能!

这就是我的尝试方式,我将背景图像放在像这样的选项的数据属性中

<select name="language_selector" id="language-selector">
  <option value="english" data-background-image="img/england.svg">English</option>
  <option value="spanish" selected data-background-image="img/spain.svg">Spanish</option>
</select>

然后我尝试使用SASS 来设置选择框的值,基于这样的选定选项

select {
 height: 45px;
 width: 300px;
 border-radius: 4px;
 font-family:$font;
 font-weight: 400;
 -webkit-font-smoothing: antialiased;
 -webkit-appearance: none;
 -moz-appearance: none;
  appearance: none;
  padding-left: 40px;
  position:relative;
  background-repeat: no-repeat;
  background-position-x: 10px;
  background-position-y: center;
  background-size: 18px;
  option:active ~ & {
     background-image:url(attr(data-background-image));
  }
 }

这样的事情可能吗?如何获取 option 属性的值并将其应用于选择框?

我知道我可以为此使用 Javascript,但目的是纯粹使用 CSS/SASS,而不是使用任何 JS。

【问题讨论】:

    标签: html css sass


    【解决方案1】:

    我很确定,你必须使用类似的东西

    //pseudo sass
    parent if child(with id='') has attribute selected {
      background-img: '.../.../...';
    }
    

    但不是根据里面的孩子来选择父母 可能..所以必须使用javascript。

     option:active ~ & {
         background-image:url(attr(data-background-image));
      }
    

    像这样你只会选择选项本身可能不是你的目标吗?

    【讨论】:

    • 我真的很困惑你在第一个代码sn-p中做了什么,你能解释一下吗?
    • 它并不是真正的代码,它只是我希望你想做的事情。
    【解决方案2】:

    你可以使用

    select
    {
        option:checked ~ &{
             background-image:url(attr(data-background-image));
       }
    }
    

    【讨论】:

    • 您能否稍微扩展一下这个答案,向 OP 解释您为什么使用这些运算符以及它如何实现目标(如果有的话)?这不仅会帮助 OP,还会帮助以后找到此问题/答案并从中受益的其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多