Modifier le style de la flèche

j'essaie de remplacer la flèche d'un select par une image de moi-même. J'Inclus Le select dans un div avec la même taille, j'ai placé le fond du select comme transparent et j'inclus une image(avec la même taille que la flèche) dans le coin supérieur droit du div comme fond.

il ne fonctionne qu'en Chrome.

enter image description here

Comment puis-je le faire fonctionner dans Firefox et IE9 où je vais obtenir ceci:

enter image description here

.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>
74
demandé sur Paolo Forgia 2013-01-08 19:25:46

8 réponses

Avez-vous essayé quelque chose comme ceci:

.styled-select select {
    -moz-appearance:none; /* Firefox */
    -webkit-appearance:none; /* Safari and Chrome */
    appearance:none;
}

N'a pas été testé, mais ça devrait marcher.

EDIT : il semble que Firefox ne supporte pas cette fonctionnalité jusqu'à la version 35 ( lire la suite ici )

il y a une solution ici , jetez un oeil à jsfiddle sur ce post.

79
répondu Morpheus 2018-02-27 11:13:29

travailler avec une seule classe:

select {
    width: 268px;
    padding: 5px;
    font-size: 16px;
    line-height: 1;
    border: 0;
    border-radius: 5px;
    height: 34px;
    background: url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat right #ddd;
    -webkit-appearance: none;
    background-position-x: 244px;
}

http://jsfiddle.net/qhCsJ/4120 /

27
répondu Julio Marins 2015-02-20 22:21:23

voici une solution élégante qui utilise une portée pour montrer la valeur.

Layout est comme ceci:

<div class="selectDiv">
   <span class="selectDefault"></span>
   <select name="txtCountry" class="selectBox">
      <option class="defualt-text">-- Select Country --</option>
      <option value="1">Abkhazia</option>
      <option value="2">Afghanistan</option>
   </select>
</div>

JsFiddle

27
répondu Peter Drinnan 2015-10-24 17:44:56

j'ai mis en place un select avec une flèche personnalisée similaire à la réponse de Julio, mais il n'a pas de largeur définie et utilise un svg comme image de fond. ( arrow_drop_down à partir de matériau de l'interface utilisateur des icones)

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

enter image description here

si vous avez besoin qu'il fonctionne aussi dans IE, mettez à jour la flèche svg pour base64 et ajoutez ce qui suit:

select::-ms-expand { display: none; }

background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+);
25
répondu steven iseki 2017-02-08 00:00:19

cela fonctionnerait bien en particulier pour ceux qui utilisent Bootstrap, testé dans les dernières versions de navigateur:

select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  /* Some browsers will not display the caret when using calc, so we put the fallback first */ 
  background: url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") white no-repeat 98.5% !important; /* !important used for overriding all other customisations */
  background: url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") white no-repeat calc(100% - 10px) !important; /* Better placement regardless of input width */
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>

<div class="container">
  <div class="row">
    <div class="col-xs-6">
      <select class="form-control">
       <option>Option 1</option>
       <option>Option 2</option>
       <option>Option 3</option>
      </select>
    </div>
  </div>
</div>
9
répondu Siavas 2017-04-01 09:22:41

vérifiez celui-ci C'est hacky, aussi simple que ça:

  • Set -prefix-appearance à none pour supprimer les styles
  • Utiliser text-indent à "pousser" le contenu d'un bit vers la droite
  • enfin, mettez text-overflow sur une chaîne vide. Tout ce qui s'étend au-delà de sa largeur deviendra... rien! Et ça inclut la flèche.

Maintenant vous êtes libre de le styliser comme vous voulez :)

Voici mon exemple de jsfiddle: http://jsfiddle.net/AEt5k/1 /

5
répondu sunilkjt 2015-07-24 13:45:15

le Style de l'étiquette avec le CSS et l'utilisation des événements de pointeur :

<label>
<select>
   <option value="0">Zero</option>
   <option value="1">One</option>
</select>
</label>

et le CSS relatif est

label:after {
    content:'BC';
    display:inline-block;
    color:#000;
    background-color:#fff;
    margin-left:-17px;   /* remove the damn :after space */
    pointer-events:none; /* let the click pass trough */
}

je viens d'utiliser une flèche vers le bas ici, mais vous pouvez définir un bloc avec une image de fond. Voici un bel échantillon de violon: https://jsfiddle.net/1rofzz89/

5
répondu Dario Corno 2015-09-20 11:50:01

il fonctionne dans tous les navigateurs:

select {
    width: 268px;
    padding: 5px;
    font-size: 16px;
    line-height: 1;
    border: 0;
    border-radius: 5px;
    height: 34px;
    background: url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat right #ddd;
    appearance:none;
    -moz-appearance:none; /* Firefox */
    -webkit-appearance:none; /* Safari and Chrome */
    background-position-x: 244px;

}
3
répondu kishan Radadiya 2016-03-18 06:09:08