8

下の図に示すように、Select タグを設計しようとしています。

ここに画像の説明を入力

どういうわけか、selectタグをdivでラップすることで設計できました。しかし問題は、設計された矢印をクリックすると、選択タグが機能しないか、すべてのリストが表示されないことです。

私が期待しているのは、矢印をクリックすると、選択タグにすべてのオプションが表示されるはずです。親ラッパー要素の疑似要素を使用して矢印セクションが生成されるため、これは発生しません。機能していないように見えるため、疑似要素セレクター select タグは使用していません。

親ラッパーを使用してこの問題を解決できbackground-imageますが、可能な限りhtmlを変更する完全な権利があるため、画像やjavascriptを使用しない、つまりCSSのみを使用するより良いアプローチを探しています。

これがフィドルです。

<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;
}
4

5 に答える 5

4

pointer-events:none;疑似要素クラスに追加します。

フィドル

注意: IE10- は pointer-events プロパティをサポートしていません ( 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; /* <-- */
}
于 2013-10-14T05:53:41.323 に答える
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;
}
于 2013-10-14T05:53:03.760 に答える
0

カスタム選択を使用できます。css と jquery を使用してオリジナルに基づいて新しいデザインの選択要素を作成します。

ここで例をダウンロードできます

https://github.com/yanivsuzana/new_select

于 2014-04-13T16:19:59.547 に答える