Виберіть параметр відступ, який не працює в хромі


83

Виберіть параметр відступ, який не працює в хромі

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

2
Чого ви намагаєтесь досягти? Кожен з варіантів повинен бути заповнений 5px? Або просто головний ящик?
DeeKayy90

так ... Мені потрібне заповнення значення опції
Піюш Марванія

1
Незважаючи на те, що це не суворо заповнення, для лівого заповнення можна використовувати & nbsp; поки це виправлено: jsfiddle.net/chech/u5rcheqf/1
чеч

Відповіді:


136

Я щойно знайшов спосіб застосувати відступ до вибраного вводу в 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;до першого варіанту у вибраному списку перевірки цього та цього , Надія допомагає.
shaijut

2
@stom Це може працювати для лівого та правого заповнення, але я не думаю, що це буде працювати для верхнього та нижнього заповнення.
rmmoul

Це вже не працює, принаймні в моїй машині! :)
Nuno cruz

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

3
стрілки губляться з цим :(
Raul H

40

Цей простий хакер зробить відступ тексту. Працює добре.

select {
  text-indent: 5px;
}

1
Ідеальна відповідь. Працював ідеально.
Hussnain Cheema

13
Це додає відступ до самого виділення, але не до параметрів. А застосовувати відступ до тексту до опції також не працює в Chrome 64.
chris.ribal

Chrome 71 називає це "невідомою властивістю".
Позначте

9

Здається, що

На жаль, браузери webkit ще не підтримують стиль тегів параметрів.

Ви можете знайти подібне запитання тут

  1. Як стилізувати елемент опції тегу 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 Я розумію, проте, наскільки я пам'ятаю, неможливо змінити окремі елементи за допомогою опції select. Тому я запропонував альтернативу.
DeeKayy90

1
Цей приклад не забезпечує навігації на клавіатурі (стрілки або комбінації клавіш Mac), інструментів веб-доступності.
Piotr Łużecki

Знову ж таки, питання полягало не в створенні власного випадаючого меню, а в додаванні в заповнення. Я дав безглузду основу для ОП відповідно до їхніх вимог, однак я не буду створювати спеціальний контроль для них. =)
DeeKayy90

1
Якщо ви збираєтеся скористатися випадаючим списком UL / LI, я б запропонував просто використати випадаючий віджет Bootstrap. Версії 2 та 3 підтримують роль = "меню" та роль = "навігація", щоб увімкнути клавіші зі стрілками. Має сенс використовувати те, що було перевірено добре ІМО.
mbokil

@mbokil +1, безумовно, хороший варіант, а не винаходити колесо, використовуйте те, що є.
DeeKayy90

2

Це не працює при optionвведенні, оскільки це спадне меню, яке генерується "системою", але ви можете встановити paddingвибір.

Просто скиньте box-sizingвластивість content-boxу своєму CSS.

Значення за замовчуванням select- border-box.

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

ви можете встановити відступ select - ідеально працює в Chrome 75
danday74

1

У мене є невелика хитрість щодо вашої проблеми. Але для цього ви повинні використовувати javascript. Якщо ви виявили, що браузер Chrome, вставте " фіктивні " параметри між усіма параметрами. Дайте новий клас для цих " фіктивних " опцій та зробіть їх вимкненими. Висоту " фіктивних " параметрів можна визначити за допомогою властивості size-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


-2

Ви можете використовувати font-sizeвластивість для опції, якщо вам потрібно.


Здається, це працює в chrome, але не в Firefox (остання версія). Firefox все ще націлює лише стиль на не вибраний вікно до випадаючого списку.

-8

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

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

Це просто повторіть те, що вже відповідали інші відповіді, чи можете ви дати щось нове?
Тів,

-9

Вам слід націлити вибір на ваш CSS, а не параметр вибору.

select { 
padding: 10px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
}

Перегляньте цю статтю Styling Select Box із CSS3, щоб отримати більше варіантів стилізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.