我正在尝试设计一个Select标签,如下图所示:
不知怎的,我设法通过将select标签包装在div中来设计它。但问题是当我点击设计的箭头时,选择标签无法正常运行或显示所有列表。
我期待的是,当我点击箭头时,select标签应显示所有选项。因为箭头部分是使用父包装元素伪元素生成的,所以没有发生这种情况。我还没有使用伪元素选择器选择标记因为it seems to be not working。
我可以使用background-image
向父包装器解决此问题,但由于我拥有完全权限可以更改html,我正在寻找更好的方法而不使用图像或javascript,即只使用CSS。
以下是 fiddle 。
<div class="select-wrapper">
<select>
<option>EEE</option>
<option>ECE</option>
<option>EIE</option>
</select>
</div>
.select-wrapper {
display:inline-block;
border:1px solid #bbbbbb;
position:relative;
width:120px;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
margin-top: 10px;
}
.select-wrapper:before{
content: "";
position:absolute;
right: 5px;
top:8px;
border-width: 5px 5px 5px 5px;
border-style: solid;
border-color: #666666 transparent transparent transparent ;
z-index:3;
}
.select-wrapper:after {
content:"";
display:block;
position:absolute;
top:0px;
bottom:0px;
width:20px;
right:0px;
border-left:1px solid #bababa;
background-color:#ededed;
-webkit-border-top-right-radius:5px;
-moz-border-top-right-radius:5px;
border-top-right-radius:5px;
-webkit-border-bottom-right-radius:5px;
-moz-border-bottom-right-radius:5px;
border-bottom-right-radius:5px;
}
select {
width:100%;
background-color:#ededed;
border:none;
outline:none;
padding:0px;
margin:0px;
position:relative;
}
答案 0 :(得分:4)
将pointer-events:none;
添加到伪元素类中。
<强> FIDDLE 强>
NB: IE10-不支持指针事件属性(caniuse表示IE11会这样)
所以对于IE:
要么你必须解决箭头无法点击或
您可以使用 Modernizr 来检测是否支持指针事件 - 如果不支持(IE10-) - 还原为标准的内置箭头。 (在这种情况下不使用您的特殊样式类)
.select-wrapper:before{
content: "";
position:absolute;
right: 5px;
top:8px;
border-width: 5px 5px 5px 5px;
border-style: solid;
border-color: #666666 transparent transparent transparent ;
z-index:3;
pointer-events:none; /* <-- */
}
.select-wrapper:after {
content:"";
display:block;
position:absolute;
top:0px;
bottom:0px;
width:20px;
right:0px;
border-left:1px solid #bababa;
background-color:#ededed;
-webkit-border-top-right-radius:5px;
-moz-border-top-right-radius:5px;
border-top-right-radius:5px;
-webkit-border-bottom-right-radius:5px;
-moz-border-bottom-right-radius:5px;
border-bottom-right-radius:5px;
pointer-events:none; /* <-- */
}
答案 1 :(得分:2)
使用:after
,:before
伪创建一个虚拟元素,并将其覆盖在您的选择框上,因此您无法触发select
元素。最好的办法是在这里使用background-image
..我从头开始制作以下内容,你可以查看。
.select_wrap {
width: 180px; /* Make sure it is less than the select width */
overflow: hidden; /* Hide default arrow */
border: 2px solid #515151;
border-radius: 5px;
}
select {
width: 220px; /* Your wish, make sure it overflows parent */
padding: 5px;
border: 0;
background: #f5f5f5; /* Fall back */
background: url(http://s2.postimg.org/s44rm4vbp/Untitled_1.png), linear-gradient(to bottom, #f5f5f5 0%,#f6f6f6 47%,#dddddd 100%);
background-repeat: no-repeat;
background-size: 30px 30px, auto auto;
background-position: 150px 0, center center;
}
答案 2 :(得分:1)
答案 3 :(得分:1)
这似乎是设计select标签的最接近的解决方案。
<div class="parent">
<div class="select-wrapper">
<select>
<option>EEE</option>
<option>ECE</option>
<option>EIE</option>
</select>
</div>
</div>
.select-wrapper {
display:inline-block;
position:relative;
width:140px;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
margin-top: 10px;
overflow:hidden;
background-color:#ededed;
margin-left:-20px;
border-right: 1px solid #bababa;
}
.select-wrapper:before {
content:"";
position:absolute;
right: 5px;
top:8px;
border-width: 5px 5px 5px 5px;
border-style: solid;
border-color: #666666 transparent transparent transparent;
z-index:3;
}
.select-wrapper:after {
content:"";
display:block;
position:absolute;
top:0px;
bottom:0px;
width:20px;
right:0px;
border-left:1px solid #bababa;
background-color:#ededed;
-webkit-border-top-right-radius:5px;
-moz-border-top-right-radius:5px;
border-top-right-radius:5px;
-webkit-border-bottom-right-radius:5px;
-moz-border-bottom-right-radius:5px;
border-bottom-right-radius:5px;
}
select {
width:100%;
background-color:transparent;
border:none;
outline:none;
padding:0px;
margin:0px;
position:relative;
z-index:4;
margin-left:20px;
border: 1px solid #bababa;
border-right: 0px;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
}
.parent {
display:inline-block;
overflow:hidden;
}
您还可以将:active
选择器与:after
/ :before
伪元素选择器结合使用,使其更加出色。像这样:
.select-wrapper:active:before{
/** css here **/
}
.select-wrapper:active:after{
/** css here **/
}
答案 4 :(得分:0)