2015-10-07 2 views
12

У меня есть этот пример:Как поместить фоновый цвет только в раздел выбора? CSS

link

КОД HTML:

<div class="select-style"> 
    <select> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
    </select> 
</div> 

КОД CSS:

.select-style { 
    padding: 0; 
    margin: 0; 
    border: 1px solid #ccc; 
    width: 120px; 
    border-radius: 3px; 
    overflow: hidden; 
    background-color: #fff; 
    background: #fff url("http://www.scottgood.com/jsg/blog.nsf/images/arrowdown.gif") no-repeat 90% 50%; 
} 

.select-style select { 
    padding: 5px 8px; 
    width: 130%; 
    border: none; 
    box-shadow: none; 
    background-color: transparent; 
    background-image: none; 
    -webkit-appearance: none; 
     -moz-appearance: none; 
      appearance: none; 
} 

.select-style select:focus { 
    outline: none; 
} 

я помещал картину, чтобы лучше понять, что я хотеть сделать.

enter image description here

Как я могу сделать это на моей структуре?

Имеет ли нынешняя структура? Или другая структура создала HTML?

Заранее благодарен!

+0

добавить цвет фона для самого стрелка фонового изображения, чтобы сделать его простым .. –

+0

и без этой опции, это 'ы не другой?Я хочу использовать только CSS и HTML – Marius

+0

Было бы лучше сделать поддельный выбор, который можно легко настроить (например, select2 или выбрано) – Justinas

ответ

3

Вам нужно что-то вроде этого?

http://codepen.io/anon/pen/bVWmgP

.select-style:after { 
      content: ''; 
      background-color: #000; 
      position: absolute; 
      border-left: 3px solid #F00; 
      z-index: 0; 
      top: 0; 
      right: 0; 
      bottom: 0; 
      left: 85px; 
     } 

    .select-style:before { 
     content: ''; 
     background-color: white; 
     position: absolute; 
     z-index: -20; 
     top: 0; 
     right: 0; 
     bottom: 0; 
     left: 0; 
    } 

Примечание: Вы не сможете изменить выберите списки стрелка цвета без добавления дополнительного изображения, которое будет представлять эту стрелку.

+0

http://codepen.io/anon/pen/bVWmvb посмотреть это обновление ... мой выбор его красный, и я хочу иметь фоновый цвет: белый; – Marius

+1

Вы посмотрели решение @Manoj Kumar? Похоже, он делает то, что вы хотите. – Paran0a

+0

да, но я хочу знать, как сделать с вашим решением ... оба очень интересны – Marius

4

Для этого можно использовать псевдоэлемент.

Прикрепите: псевдоэлемент к div и примените желаемые свойства background-color и border-left. Чтобы сделать его видимым, примените background-color: transparent к .select-style.

.select-style { 
 
    position: relative; 
 
    padding: 0; 
 
    margin: 0; 
 
    border: 1px solid #ccc; 
 
    width: 120px; 
 
    border-radius: 3px; 
 
    overflow: hidden; 
 
    background: transparent url("http://www.scottgood.com/jsg/blog.nsf/images/arrowdown.gif") no-repeat 90% 50%; 
 
} 
 
.select-style select { 
 
    padding: 5px 8px; 
 
    width: 130%; 
 
    border: none; 
 
    background-color: transparent; 
 
    background-image: none; 
 
    -webkit-appearance: none; 
 
    -moz-appearance: none; 
 
    appearance: none; 
 
} 
 
.select-style select:focus { 
 
    outline: none; 
 
} 
 
.select-style:after { 
 
    position: absolute; 
 
    content: ''; 
 
    width: 36px; 
 
    height: 100%; 
 
    background-color: #ddd; 
 
    border-left: 1px solid #ccc; 
 
    top: 0; 
 
    right: -1px; 
 
    z-index: -1; 
 
    border-radius: 0 1px 1px 0; 
 
}
<div class="select-style"> 
 
    <select> 
 
    <option value="volvo">Volvo</option> 
 
    <option value="saab">Saab</option> 
 
    <option value="mercedes">Mercedes</option> 
 
    <option value="audi">Audi</option> 
 
    </select> 
 
</div>

+0

https://jsfiddle.net/852aseb0/8/ посмотреть это обновление. Как я могу сделать тег select иметь backgrlound-color: blue? Теперь он красный, потому что у него есть фон: прозрачный – Marius

6

Вы можете использовать linear-gradient в сочетании с background-image.

  1. background-image свойство позволяет сочетание url() и linear-gradient(), так что вы можете попробовать отделяя значения. То же самое для background-position, поскольку мы контролируем положение изображения url с 95px значением, в то время как линейный градиент невозможен с центром центра.
  2. Использование линейного градиента. Первые 70% заполнены белым цветом фона, а остальные 30% будут светло-серыми в этом примере.
  3. Создайте границу с использованием небольшой доли процентного значения, то есть 70% gray, до 71% gray в линейном градиенте.

.select-style { 
 
    background-image: url("http://www.scottgood.com/jsg/blog.nsf/images/arrowdown.gif"), linear-gradient(to right, white 70%, gray 70%, gray 71%, lightgray 71%, lightgray 100%); 
 
    background-position: 95px center, center center; 
 
    background-repeat: no-repeat; 
 
    border: 1px solid #ccc; 
 
    border-radius: 3px; 
 
    margin: 0; 
 
    overflow: hidden; 
 
    padding: 0; 
 
    width: 120px; 
 
} 
 
.select-style select { 
 
    padding: 5px 8px; 
 
    width: 130%; 
 
    border: none; 
 
    box-shadow: none; 
 
    background-color: transparent; 
 
    background-image: none; 
 
    -webkit-appearance: none; 
 
    -moz-appearance: none; 
 
    appearance: none; 
 
} 
 
.select-style select:focus { 
 
    outline: none; 
 
}
<div class="select-style"> 
 
    <select> 
 
    <option value="volvo">Volvo</option> 
 
    <option value="saab">Saab</option> 
 
    <option value="mercedes">Mercedes</option> 
 
    <option value="audi">Audi</option> 
 
    </select> 
 
</div>

+1

Я собирался ответить на вопрос так, как вы это делали. Очень гладкое и простое решение! – Chris