如何在选择列表中添加图像?

May*_*yur 136 html css

我有一个选择的性别列表.

码:

<select>
<option>male</option>
<option>female</option>
<option>others</option>
</select>  
Run Code Online (Sandbox Code Playgroud)

我想在下拉列表中使用drop-down-icon.jpeg中的图像.

我想添加一个按钮代替下拉图标.

怎么做?

var*_*tec 163

Firefox中,您只需将背景图像添加到选项:

<select>
  <option style="background-image:url(male.png);">male</option>
  <option style="background-image:url(female.png);">female</option>
  <option style="background-image:url(others.png);">others</option>
</select> 
Run Code Online (Sandbox Code Playgroud)

更好的是,您可以将HTML和CSS分开

HTML

<select id="gender">
  <option>male</option>
  <option>female</option>
  <option>others</option>
</select>  
Run Code Online (Sandbox Code Playgroud)

CSS

select#gender option[value="male"]   { background-image:url(male.png);   }
select#gender option[value="female"] { background-image:url(female.png); }
select#gender option[value="others"] { background-image:url(others.png); }
Run Code Online (Sandbox Code Playgroud)

其他浏览器中,唯一的方法是使用一些JS小部件库,例如jQuery UI,例如使用Selectable.

从jQuery UI 1.11开始,Selectmenu小部件可用,它非常接近你想要的.

  • @IvanKuckir - Pffff.W3C仍在"讨论"为什么以及为什么不应该这样做的原因,并且在实施关于该主题的研究之后,委员会将讨论实现这一目标的潜在优势和劣势.完成后,将进行关于向后兼容性的实地研究.然后他们将为色盲人员进行一项研究.一旦提出建议,将会有关于对其他元素(例如复选框)的潜在副作用的研究.毕竟,他们将进行一项研究,以决定是否需要所有这些研究. (22认同)
  • 您在2015年有任何W3C有效的解决方案吗?没有重新实现选择框? (19认同)
  • 2017年怎么样?仍然没有解决方案 (10认同)
  • 此代码在 Firefox 或 Chrome 中不起作用。不支持的功能 (7认同)
  • Firefox不再支持上述方法。 (4认同)

bug*_*den 24

你可以使用iconselect.js; 图标/图像选择(组合框,下拉列表)

演示和下载; http://bug7a.github.io/iconselect.js/

在此输入图像描述

HTML用法;

<div id="my-icon-select"></div>
Run Code Online (Sandbox Code Playgroud)

Javascript用法;

    var iconSelect;

    window.onload = function(){

        iconSelect = new IconSelect("my-icon-select");

        var icons = [];
        icons.push({'iconFilePath':'images/icons/1.png', 'iconValue':'1'});
        icons.push({'iconFilePath':'images/icons/2.png', 'iconValue':'2'});
        icons.push({'iconFilePath':'images/icons/3.png', 'iconValue':'3'});

        iconSelect.refresh(icons);

    };
Run Code Online (Sandbox Code Playgroud)

  • 这个插件有我见过的最奇怪的"要求"; 如果您定义了`<!doctype html>`,则CSS和滚动功能会中断. (27认同)
  • @DigitalNinja 可能依赖于怪癖模式,我猜...... (2认同)

Alv*_*oro 19

您已经有几个建议使用JavaScript/jQuery的答案.我将添加一个只使用HTML和CSS而没有任何JS的替代方案.

基本思想是使用一组单选按钮和标签(将激活/取消激活单选按钮),并使用CSS控件,只显示与所选单选按钮关联的标签.如果要允许选择多个值,可以使用复选框而不是单选按钮来实现.

这是一个例子.代码可能有点麻烦(特别是与其他解决方案相比):

.select-sim {
  width:200px;
  height:22px;
  line-height:22px;
  vertical-align:middle;
  position:relative;
  background:white;
  border:1px solid #ccc;
  overflow:hidden;
}

.select-sim::after {
  content:"?";
  font-size:0.5em;
  font-family:arial;
  position:absolute;
  top:50%;
  right:5px;
  transform:translate(0, -50%);
}

.select-sim:hover::after {
  content:"";
}

.select-sim:hover {
  overflow:visible;
}

.select-sim:hover .options .option label {
  display:inline-block;
}

.select-sim:hover .options {
  background:white;
  border:1px solid #ccc;
  position:absolute;
  top:-1px;
  left:-1px;
  width:100%;
  height:88px;
  overflow-y:scroll;
}

.select-sim .options .option {
  overflow:hidden;
}

.select-sim:hover .options .option {
  height:22px;
  overflow:hidden;
}

.select-sim .options .option img {
  vertical-align:middle;
}

.select-sim .options .option label {
  display:none;
}

.select-sim .options .option input {
  width:0;
  height:0;
  overflow:hidden;
  margin:0;
  padding:0;
  float:left;
  display:inline-block;
  /* fix specific for Firefox */
  position: absolute;
  left: -10000px;
}

.select-sim .options .option input:checked + label {
  display:block;
  width:100%;
}

.select-sim:hover .options .option input + label {
  display:block;
}

.select-sim:hover .options .option input:checked + label {
  background:#fffff0;
}
Run Code Online (Sandbox Code Playgroud)
<div class="select-sim" id="select-color">
  <div class="options">
    <div class="option">
      <input type="radio" name="color" value="" id="color-" checked />
      <label for="color-">
        <img src="http://placehold.it/22/ffffff/ffffff" alt="" /> Select an option
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="red" id="color-red" />
      <label for="color-red">
        <img src="http://placehold.it/22/ff0000/ffffff" alt="" /> Red
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="green" id="color-green" />
      <label for="color-green">
        <img src="http://placehold.it/22/00ff00/ffffff" alt="" /> Green
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="blue" id="color-blue" />
      <label for="color-blue">
        <img src="http://placehold.it/22/0000ff/ffffff" alt="" /> Blue
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="yellow" id="color-yellow" />
      <label for="color-yellow">
        <img src="http://placehold.it/22/ffff00/ffffff" alt="" /> Yellow
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="pink" id="color-pink" />
      <label for="color-pink">
        <img src="http://placehold.it/22/ff00ff/ffffff" alt="" /> Pink
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="turquoise" id="color-turquoise" />
      <label for="color-turquoise">
        <img src="http://placehold.it/22/00ffff/ffffff" alt="" /> Turquoise
      </label>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 需要将鼠标移出才能折叠。可以通过点击而不是鼠标悬停/移动来完成吗?这适用于移动/非鼠标设备吗? (4认同)

Tar*_*rik 19

我的解决方案是使用FontAwesome,然后将库图像添加为文本!你只需要Unicodes,它们可以在这里找到:FontAwesome参考文件forUnicodes

这是一个示例状态过滤器:

<select name='state' style='height: 45px; font-family:Arial, FontAwesome;'>
<option value=''>&#xf039; &nbsp; All States</option>
<option value='enabled' style='color:green;'>&#xf00c; &nbsp; Enabled</option>
<option value='paused' style='color:orange;'>&#xf04c; &nbsp; Paused</option>
<option value='archived' style='color:red;'>&#xf023; &nbsp; Archived</option>
</select>
Run Code Online (Sandbox Code Playgroud)

注意font-family:Arial,FontAwesome; 需要按照示例中给出的选择样式分配!

  • 这正是我想要做的!我真的不想要实现另一个js插件 - 所以这是完美的,因为我已经在我的网站中使用FontAwesome图标. (2认同)

jer*_*iuh 17

针对此问题的另一个jQuery跨浏览器解决方案是http://designwithpc.com/Plugins/ddSlick,它正是为了这个用途而制作的.

  • 视图演示在我的计算机上不起作用(Linux Mint + Firefox 44) (2认同)
  • 仅仅链接到图书馆并不是一个好的答案。链接到它,解释它为什么解决问题,并提供使用库来这样做的代码可以提供更好的答案。请参阅:[**如何以社区友好的方式链接到外部资源?**](https://meta.stackexchange.com/questions/94022/how-can-i-link-to-an-社区友好的外部资源方式) (2认同)

Tim*_*Tim 10

对于国家,语言或货币,您可以使用表情符号。

几乎可以与支持表情符号使用的所有浏览器/操作系统一起使用。

select {
 height: 50px;
 line-height: 50px;
 font-size: 12pt;
}
Run Code Online (Sandbox Code Playgroud)
<select name="countries">
    <option value="NL">&emsp;Netherlands</option>
    <option value="DE">&emsp;Germany</option>
    <option value="FR">&emsp;France</option>
    <option value="ES">&emsp;Spain</option>
</select>

<br /><br />

<select name="currency">
    <option value="EUR">&emsp;€&emsp;EUR&emsp;</option>
    <option value="GBP">&emsp;£&emsp;GBP&emsp;</option>
    <option value="USD">&emsp;$&emsp;USD&emsp;</option>
    <option value="YEN">&emsp;¥&emsp;YEN&emsp;</option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • _“几乎所有支持表情符号使用的浏览器/操作系统都可以使用” _...。但Windows不支持表情符号标志。 (5认同)
  • ...Google Chrome 也不行,即使在 Windows 之外也是如此:( (5认同)
  • 三年半过去了,这仍然不是在 Windows 上显示表情符号标志的解决方案,Firefox 是一个明显的例外。因此,除非您在 Windows 上使用 Firefox,否则上面的 _countries_ 列表中的标志将与其关联的区域指示符符号一起呈现。例如,_France_ 的条目将呈现 _FR_ 而不是法国国旗等。 (3认同)