我正在尝试用我自己的照片替换选择的箭头。我包括选择在一个div与相同的大小,我设置的背景选择为透明,我包括一个图片(与箭头大小相同)在div的右上角作为背景。
它只适用于Chrome浏览器。
我如何让它在Firefox和IE9中工作,我得到了这个:
.styled-select {
width: 100px;
height: 17px;
overflow: hidden;
overflow: -moz-hidden-unscrollable;
background: url(images/downarrow_blue.png) no-repeat right white;
border: 2px double red;
display: inline-block;
position: relative;
}
.styled-select select {
background: transparent;
-webkit-appearance: none;
width: 100px;
font-size: 11px;
border: 0;
height: 17px;
position: absolute;
left: 0;
top: 0;
}
body {
background-color: #333333;
color: #FFFFFF;
}
.block label {
color: white;
}
<HTML>
<HEAD>
</HEAD>
<BODY>
<p/>
<form action="/prepareUpdateCategoryList.do?forwardto=search">
<fieldset class="block" id="searchBlock">
<p>
<label style="width:80px">Class</label>
<div class="styled-select">
<select property="voucherCategoryClass">
<option value="0">Select </option>
<option value="7382">steam </option>
</select>
</div>
</p>
</fieldset>
</form>
</BODY>
</HTML>
我设置了一个自定义箭头的选择,类似于Julio的答案,但它没有设置宽度,并使用svg作为背景图像。(arrow_drop_down from material-ui icons)
select {
-webkit-appearance: none;
-moz-appearance: none;
background: transparent;
background-image: url("data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>");
background-repeat: no-repeat;
background-position-x: 100%;
background-position-y: 5px;
border: 1px solid #dfdfdf;
border-radius: 2px;
margin-right: 2rem;
padding: 1rem;
padding-right: 2rem;
}
如果你需要它也在IE中工作,更新svg箭头到base64并添加以下内容:
select::-ms-expand { display: none; }
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+);
为了方便调整箭头的大小和间距,可以使用svg:
url("data:image/svg+xml,<svg width='24' height='24' xmlns='http://www.w3.org/2000/svg'><path d='m0,6l12,12l12,-12l-24,0z'/><path fill='none' d='m0,0l24,0l0,24l-24,0l0,-24z'/></svg>");
它在箭头两侧没有任何间距。
我已经提到了这篇文章,它像魅力一样工作,除了它没有隐藏在IE浏览器中的箭头。
但是添加以下会隐藏IE中的箭头:
&: -ms-expand {
显示:没有;
}
完整解决方案(sass)
$select-border-color: #ccc;
$select-focus-color: green;
select {
cursor: pointer;
/* styling */
background-color: white;
border: 1px solid $select-border-color;
border-radius: 4px;
display: inline-block;
font: inherit;
line-height: 1.5em;
padding: 0.5em 3.5em 0.5em 1em;
/* reset */
margin: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-appearance: none;
-moz-appearance: none;
background-image: linear-gradient(45deg, transparent 50%, $select-border-color 50%),
linear-gradient(135deg, $select-border-color 50%, transparent 50%),
linear-gradient(to right, $select-border-color, $select-border-color);
background-position: calc(100% - 20px) calc(1em + 2px),
calc(100% - 15px) calc(1em + 2px), calc(100% - 2.5em) 0.5em;
background-size: 5px 5px, 5px 5px, 1px 1.5em;
background-repeat: no-repeat;
/* Very imp: hide arrow in IE */
&::-ms-expand {
display: none;
}
&:-moz-focusring {
color: transparent;
text-shadow: none;
}
&:focus {
background-image: linear-gradient(45deg, $select-focus-color 50%, transparent 50%),
linear-gradient(135deg, transparent 50%, $select-focus-color 50%), linear-gradient(to right, $select-focus-color, $select-focus-color);
background-position: calc(100% - 15px) 1em, calc(100% - 20px) 1em, calc(100% - 2.5em) 0.5em;
background-size: 5px 5px, 5px 5px, 1px 1.5em;
background-repeat: no-repeat;
border-color: $select-focus-color;
outline: 0;
}
}
这里有几个例子
它是基于这个答案,但我添加了一个列表,以使设计更加简洁
select.moreMinimal {
background-color: inherit;
display: inline-block;
font: inherit;
padding: 0 2.2em 0 1em;
margin: 0;
cursor: pointer;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-appearance: none;
-moz-appearance: none;
}
select.moreMinimal {
background-image:
linear-gradient(45deg, transparent 50%, gray 50%),
linear-gradient(135deg, gray 50%, transparent 50%);
background-position:
calc(100% - 20px),
calc(100% - 15px);
background-size:
5px 5px,
5px 5px;
background-repeat: no-repeat;
}
//TODO: Probably shouldn't be focus, cause when you click it again it's still green
select.moreMinimal:focus {
background-image:
linear-gradient(45deg, green 50%, transparent 50%),
linear-gradient(135deg, transparent 50%, green 50%);
background-position:
calc(100% - 15px),
calc(100% - 20px);
background-size:
5px 5px,
5px 5px;
background-repeat: no-repeat;
border-color: green;
outline: 0;
}
我想澄清一件之前没人提到过的事。
首先获取svg图像或图标
在那里,你会得到一些xml代码,如这些<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4 10.127L12 18.127L20 10.127H4Z" fill="#8E8E93"/> </svg>试着找到它。
然后在这段代码后面加上data:image/svg+xml;utf8,
替换填充颜色fill="#8E8E93"到this fill="%238E8E93"如果你想添加十六进制颜色,你应该将#改为%23
下面是html代码:
<fieldset>
<label for="editName">Country</label>
<select class="ra-select">
<option value="bangladesh" selected>Bangladesh</option>
<option value="saudi arabia">Saudi Arabia</option>
<option value="us">Uinited State Of America</option>
<option value="india">India</option>
</select>
</fieldset>
下面是css代码:
.ra-select {
width: 30%;
padding: 10px;
/* Replace Default styling (arrow) */
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url('data:image/svg+xml;utf8,<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 10.127L12 18.127L20 10.127H4Z" fill="%238E8E93"/></svg>');
background-repeat: no-repeat;
background-position-y: 50%;
background-position-x: 98%;
}
.ra-select:focus,
.ra-select:hover {
outline: none;
border: 1px solid #bbb;
}
.ra-select option {
background-color: #fff;
}
好吧,这里似乎有很多答案。有些可能比其他的更好。如果有人绝望到想往下翻,这是我的意见:
如果你真的想要样式你的下拉菜单,不要使用<select>。在Div中使用常规的<ul>将会更加灵活。然而,如果你真的坚持使用select,因为你只是想要最小的下拉列表,这是我的:
select {
appearance: none;
background: white;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M6.1018 8C5.02785 8 4.45387 9.2649 5.16108 10.0731L10.6829 16.3838C11.3801 17.1806 12.6197 17.1806 13.3169 16.3838L18.8388 10.0731C19.5459 9.2649 18.972 8 17.898 8H6.1018Z' fill='%23212121'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 0.5rem center;
border-radius: 2px;
padding: 0.25rem 2rem 0.25rem 0.75rem;
}
<select>
<option value="bottom-right">Bottom right</option>
<option value="bottom-left">Bottom left</option>
<option value="top-right">Top right</option>
<option value="top-left">Top left</option>
</select>
关键部分是找到一个插入符号svg,你可以把它URL转换成字符串。我可以稍微加强它,也许以某种方式旋转插入符号,但真的-我很高兴它不太丑。