Выберите вариант заполнения, не работающий в Chrome


84

Выберите вариант заполнения, не работающий в Chrome

<style>
select option { padding:5px 0px; }
</style>    
<select>
<option>1</option>
<option>2</option>
<option>3</option> 
</select>

2
Чего вы пытаетесь достичь? Каждый из вариантов должен быть дополнен на 5 пикселей? Или просто основная коробка?
DeeKayy90,

да ... мне нужны отступы для значения параметра
Пиюш Марвания

1
Несмотря на то, что это не совсем заполнение, для заполнения левого поля вы можете использовать & nbsp; в то время как это получает фиксированный: jsfiddle.net/chech/u5rcheqf/1
Chech

Ответы:


137

Я только что нашел способ применить дополнение к вводу выбора в Chrome

select{
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    padding: 5px;
}

Кажется, работает в текущем Chrome 39.0.2171.71 (64-бит) и сафари (я тестировал это только на Mac).

Кажется, это удаляет стиль по умолчанию, добавленный к входу выбора (он также удаляет стрелку раскрывающегося списка), но позволяет вам затем использовать свой собственный стиль без его переопределения хромом.

Я наткнулся на это исправление, используя код отсюда: http://fettblog.eu/style-select-elements/


1
Другое решение, которое работает во всех браузерах , - это добавление &nbsp;к первому варианту в списке выбора, проверьте это и это , Надежда помогает.
Shaiju T 05

2
@stom Это может сработать для левого и правого отступов, но я не думаю, что это сработает для верхнего и нижнего отступов.
rmmoul 05

1
Это больше не работает, по крайней мере, на моей машине! :)
Нуно Круз

1
Вы также можете использовать плагин как выбор2 или выбран , который преобразует ваши <select><option/></select>элементы в полностью настраиваемые <ul><li/></ul>элементы. Таким образом, вы можете оформить все свои раскрывающиеся списки в соответствии с другими полями ввода или общим пользовательским интерфейсом.
Tad Wohlrapp

3
стрелки теряются с этим :(
Рауль Х

40

Этот простой прием сделает текст отступом. Работает хорошо.

select {
  text-indent: 5px;
}

15
Это добавляет отступ к самому выделению, но не к параметрам. И применение отступа текста к опции не работает и в Chrome 64.
chris.ribal

Chrome 71 называет это «неизвестным свойством».
Марк

9

Кажется, что

К сожалению, браузеры webkit пока не поддерживают стили тегов параметров.

вы можете найти аналогичный вопрос здесь

  1. Как стилизовать элемент option тега select?
  2. Значение параметра стиля в раскрывающемся списке html не работает в Chrome и Safari

Наиболее широко используемым кроссбраузерным решением является использование ul li

Надеюсь, поможет!


9
Спасибо за ответ. Для меня удивительно, что спустя столько лет с тех пор, как появились веб-сайты, HTML и CSS, по-прежнему отсутствует возможность стилизовать такие вещи, как заполнение параметров выбора. Стилизация и расположение элементов могут быть очень неприятными, но в разработке для Android это намного проще. Я не понимаю, почему веб-среда с HTML и CSS кажется такой «незавершенной», «незавершенной» по сравнению с настольной и родной мобильной средами.
Брайан

2
возможно, в ближайшем будущем Интернет станет более красивым, и разработчики получат руку помощи теневого дома - robdodson.me/shadow-dom-styles :) надеюсь, разработчики получат контроль над внутренним слоем элементов формы. Хотя RIP IE.
Pravin Waychal

2
@Bryan Web - это старая технология, и поэтому в ней есть некоторые старые идеи, которые не были улучшены. Из-за поддержки браузеров новые функции всегда медленно доходили до кого-либо, и из-за отсутствия невнимательности (есть существующие обходные пути, которые люди делают, и конечный пользователь не замечает, что этих браузеров не хватает) ничего не меняется.
csga5000

6

Я исправил это с помощью этого

select {
    max-height: calc(1.2em + 24px);
    height: calc(1.2em + 24px);
}


max-height: calc(your line height + (top + bottom padding));
height: calc(your line height + (top + bottom padding));

Это, безусловно, лучшее решение, которое я когда-либо видел. Но у меня это сработало только тогда, когда это height: calc(1.2em + 24px);не такmax-height: calc(1.2em + 24px);
Юлий

Юлиус Я проверил, все ли основные браузеры работают с максимальной высотой. но использование атрибута высоты также является хорошей возможностью.
Али Суфьян

3

Очень, ОЧЕНЬ простая идея, но вы можете изменить ее соответствующим образом. Это сделано не для того, чтобы хорошо выглядеть, а только для того, чтобы передать идею. Надеюсь, поможет.

CSS:

ul {
    width: 50px;
    height: 20px;
    border: 1px solid black;
    display: block;

}

li {
    padding: 5px 0px;
    width: 50px;
    display: none;

}

HTML:

<ul id="customComboBox">
&nbsp
    <li>Test</li>
    <li>Test 2</li>
    <li>Test 3</li>
</ul>

Сценарий:

$(document).ready(function(){
    $("#customComboBox").click(function(){
        $("li").toggle("slow");
    });
});

ДЕМО


1
@PiyushMarvaniya Я понимаю, однако, насколько я помню, невозможно изменить отдельные элементы с помощью параметра выбора. Вот почему я предложил альтернативу.
DeeKayy90

1
В этом примере нет навигации с помощью клавиатуры (стрелки или сочетания клавиш Mac) и инструментов веб-доступности.
Петр Лужецкий

Опять же, вопрос заключался не в создании настраиваемого раскрывающегося списка, а в добавлении отступов. Я дал простую основу для OP в соответствии с их требованиями, однако я не буду создавать для них настраиваемый элемент управления. =)
DeeKayy90

1
Если вы собираетесь использовать раскрывающийся список UL / LI, я бы предложил просто использовать раскрывающийся виджет Bootstrap. Версии 2 и 3 поддерживают role = "menu" и role = "navigation" для включения клавиш со стрелками. Имеет смысл использовать то, что было хорошо проверено ИМО.
mbokil

@mbokil +1, определенно хороший вариант, а не изобретать велосипед, используйте то, что есть.
DeeKayy90

2

Это не работает при optionвводе, потому что это раскрывающееся меню, созданное «системой», но вы можете установить paddingдля выбора.

Просто установите box-sizingсвойство content-boxв свой CSS.

Значение по умолчанию select- border-box.

select {
 box-sizing: content-box;
 padding: 5px 0;
}

вы можете установить отступы для выбора - отлично работает в Chrome 75
danday74 02

1

У меня есть небольшая хитрость для решения твоей проблемы. Но для этого вы должны использовать javascript. Если вы обнаружили, что браузер Chrome, вставьте « фиктивные » параметры между всеми параметрами. Задайте новый класс для этих « пустышек » и отключите их. Высота « фиктивных » параметров вы можете определить с помощью свойства font-size .

CSS:

option.dummy-option-for-chrome {
  font-size:2px;
  color:transparent;
}

Сценарий:

function prepareHtml5Selects() {

  var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
  if(!is_chrome) return;

  $('select > option').each(function() {
    $('<option class="dummy-option-for-chrome" disabled></option>')
     .insertBefore($(this));
  });
  $('<option class="dummy-option-for-chrome" disabled></option>')
    .insertAfter($('select > option:last-child'));
}

1

Не заполнение, но если ваша цель просто увеличить его, вы можете увеличить font-size. И использование его с font-size-adjustуменьшает размер шрифта до нормального при выборе, а не в параметрах, поэтому в конечном итоге он становится optionбольше.

Не уверен, работает ли он во всех браузерах или будет продолжать работать в текущем состоянии.

Протестировано в Chrome 85 и Firefox 81.

скриншот (в Firefox)

select {
    font-size: 2em;
    font-size-adjust: 0.3;
}
<label>
  Select: <select>
            <option>Option 1</option>
            <option>Option 2</option>
            <option>Option 3</option>
          </select>
</label>


0

Нет JQuery - Нет стороннего файла js

function clickComboBox(){
  comboOpt = document.getElementsByClassName("opt");
  for (i = 0; i < comboOpt.length; i++) {
      if (comboOpt[i].style.display === "block") {
        comboOpt[i].style.display = "none";
      } else {
        comboOpt[i].style.display = "block";
      }
  }    
}
function clickOpt(value1,text1){
  document.getElementById("selectedValue").value=value1;
  document.getElementById("customComboBox").innerHTML=text1;
  clickComboBox();
}
#customComboBox{
width: 150px;
height: 20px;
border: 1px solid #CCCCCC;
display: block;
padding: 2px 5px;
}
.opt{
padding: 5px 0px;background-color:#CCCCCC;
width: 160px;
display: none;
}
<div id="customComboBox"  onClick="clickComboBox()">
-Select Value-
</div>
<input type="hidden" id="selectedValue">
  <div class="opt">
  <div onClick="clickOpt('01','Test1')"><img  src="https://pasteboard.co/J6940Vs.png" height="20">Test1</div>
  <div style="padding-left:10px;" onClick="clickOpt('02','Test2')">Test2</div>
  <div onClick="clickOpt('03','Test3')">Test3</div>
  </div>

умный код - используйте jquery


0

Произвольное отступление от любого варианта

Если вы просто хотите сделать отступ для случайных, произвольных <option />элементов, вы можете использовать &nbsp;, что имеет наибольшую кроссбраузерность среди решений, размещенных здесь ...

.optionGroup {
  font-weight: bold;
  font-style: italic;
}
<select>
    <option class="optionGroup" selected disabled>Choose one</option>
    <option value="sydney" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Sydney</option>
    <option value="melbourne" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Melbourne</option>
    <option value="cromwell" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Cromwell</option>
    <option value="queenstown" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Queenstown</option>
</select>

Упорядоченный отступ параметров

Но если у вас есть отсортированная упорядоченная структура ваших данных, рекомендуется использовать <optgroup/>синтаксис ....

Элемент HTML создает группу параметров внутри элемента. (Источник: MDN Web Docs:<optgroup> )

<select>
    <optgroup label="Australia" default selected>
        <option value="sydney">Sydney</option>
        <option value="melbourne">Melbourne</option>
    </optgroup>
    <optgroup label="United Kingdom">
        <option value="london">London</option>
        <option value="glasgow">Glasgow</option>
    </optgroup>
</select>

К сожалению, <optgroup />разрешен только один уровень, который в настоящее время поддерживается браузерами. (Источник: w3.org .) Лично я считаю, что эта часть спецификации нарушена, но вы всегда можете расширить до третьего, четвертого и т. Д. Уровней отступа, используя &nbsp;описанный выше трюк.


-2

Вы можете использовать font-sizeсвойство для опции, если вам нужно.


Кажется, это работает в Chrome, но не в Firefox (последняя версия). Firefox по-прежнему ориентируется только на стиль в невыделенном поле перед раскрывающимся списком.

-8

Просто установите высоту тега выбора

select{
    height: 30px;
    max-height: 30px;
}

Это просто повторить то, что уже говорили другие ответы, не могли бы вы дать что-то новое?
Tiw

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.