设计选择标签

时间:2013-10-14 05:37:02

标签: html css

我正在尝试设计一个Select标签,如下图所示:

enter image description here

不知怎的,我设法通过将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;
}

5 个答案:

答案 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 ..我从头开始制作以下内容,你可以查看。

Demo

.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)

我使用了css3属性。

    pointer-events:none

检查fiddle

答案 3 :(得分:1)

这似乎是设计select标签的最接近的解决方案。

Working Fiddle

HTML

<div class="parent">
    <div class="select-wrapper">
        <select>
            <option>EEE</option>
            <option>ECE</option>
            <option>EIE</option>
        </select>
    </div>
</div>

CSS

.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 **/
}

Sample fiddle

答案 4 :(得分:0)

您可以使用我的自定义选择 我基于原始创建一个新的设计选择元素 用css和jquery

你可以在这里下载例子

https://github.com/yanivsuzana/new_select