Wybierz dopełnienie opcji nie działa w chrome


84

Wybierz dopełnienie opcji nie działa w chrome

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

2
Co starasz się osiągnąć? Każda z opcji ma być wypełniona 5 pikselami? Czy tylko główne pudełko?
DeeKayy90

tak ... potrzebuję uzupełnienia wartości opcji
Piyush Marvaniya

1
Mimo że nie jest to ściśle dopełnienie, w przypadku dopełnienia lewego można użyć & nbsp; podczas gdy ten dostaje Poprawiono: jsfiddle.net/chech/u5rcheqf/1
Czeskie

Odpowiedzi:


137

Właśnie znalazłem sposób, aby zastosować dopełnienie do wybranego wejścia w chrome

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

Wydaje się, że działa w obecnym chrome 39.0.2171.71 (64-bit) i safari (testowałem to tylko na Macu).

Wydaje się, że usuwa to domyślną stylizację dodaną do zaznaczonych danych wejściowych (spowodowało to również usunięcie strzałki rozwijanej), ale umożliwia następnie użycie własnego stylu bez nadpisywania go przez chrom.

Natknąłem się na tę poprawkę podczas korzystania z kodu stąd: http://fettblog.eu/style-select-elements/


1
Innym rozwiązaniem, które działa we wszystkich przeglądarkach , jest dodanie &nbsp;do pierwszej opcji na liście wyboru, sprawdź to i to , Nadzieja pomaga.
Shaiju T

2
@stom To może działać w przypadku dopełnienia lewego i prawego, ale nie sądzę, aby działało w przypadku dopełnienia górnego i dolnego.
rmmoul

1
To już nie działa, przynajmniej w mojej maszynie! :)
Nuno cruz

1
Możesz także użyć wtyczki, takiej jak select2 lub wybranej, która konwertuje twoje <select><option/></select>elementy na w pełni konfigurowalne <ul><li/></ul>elementy. W ten sposób możesz stylizować wszystkie swoje listy rozwijane pasujące do innych pól wprowadzania lub ogólnego interfejsu użytkownika.
Tad Wohlrapp

3
strzały giną przez to :(
Raul H

40

Ten prosty hack spowoduje wcięcie tekstu. Działa dobrze.

select {
  text-indent: 5px;
}

15
Spowoduje to dodanie wypełnienia do samego zaznaczenia, ale nie do opcji. A zastosowanie wcięcia tekstu w opcji nie działa również w Chrome 64.
chris.ribal

Chrome 71 nazywa to „nieznaną właściwością”.
Mark

9

Wygląda na to że

Niestety, przeglądarki webkit nie obsługują jeszcze stylizacji tagów opcji.

możesz znaleźć podobne pytanie tutaj

  1. Jak stylizować element opcji tagu select?
  2. Wartość opcji stylizacji w menu rozwijanym wyboru html nie działa w przeglądarce Chrome i Safari

Najczęściej używanym rozwiązaniem dla różnych przeglądarek jest użycie ul li

Mam nadzieję, że to pomoże!


9
Dziękuję za odpowiedź. Zdumiewa mnie, że po tylu latach, odkąd strony internetowe, HTML i CSS istniały, nadal brakuje możliwości stylizacji takich rzeczy, jak wybór dopełnienia opcji. Stylizowanie i pozycjonowanie elementów może być bardzo frustrujące, ale w programowaniu na Androida jest o wiele łatwiejsze. Nie rozumiem, dlaczego środowisko internetowe z HTML i CSS wydaje się być tak „niedokończone”, „praca w toku” w porównaniu ze środowiskami stacjonarnymi i natywnymi środowiskami mobilnymi.
Bryan

2
być może w niedalekiej przyszłości internet będzie piękniejszy, a programiści otrzymają pomocną dłoń z shadow dom - robdodson.me/shadow-dom-styles :) miejmy nadzieję, że deweloperzy uzyskają kontrolę nad wewnętrzną warstwą elementów formularzy. Jednak RIP IE.
Pravin Waychal

2
@Bryan Web to stara technologia i jako taka ma kilka starych pomysłów, które nie zostały ulepszone. Ze względu na obsługę przeglądarek nowe funkcje zawsze były powolne, aby dotrzeć do każdego, a z powodu braku niewrażliwości (istnieją istniejące obejścia, które ludzie robią, a użytkownik końcowy nie zauważa, że ​​brakuje tych przeglądarek) nic się nie zmienia.
csga5000

6

Naprawiłem to tym

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

To zdecydowanie najlepsze rozwiązanie, jakie do tej pory widziałem. Ale to działało tylko wtedy, gdy tak height: calc(1.2em + 24px);nie jestmax-height: calc(1.2em + 24px);
Juliusz

Julius Sprawdziłem, czy wszystkie główne przeglądarki działają poprawnie. ale użycie atrybutu wysokości jest również dobrą okazją.
Ali Sufyan

3

Bardzo, BARDZO prosty pomysł, ale możesz go odpowiednio zmodyfikować. To nie jest skonfigurowane, aby dobrze wyglądać, tylko po to, aby zapewnić pomysł. Mam nadzieję, że to pomoże.

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>

Scenariusz:

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

PRÓBNY


1
@PiyushMarvaniya Rozumiem, ale o ile pamiętam nie ma możliwości modyfikowania pojedynczych elementów opcją select. Dlatego zaproponowałem alternatywę.
DeeKayy90

1
Ten przykład nie zapewnia nawigacji za pomocą klawiatury (strzałki lub skróty Mac), narzędzi ułatwień dostępu w sieci.
Piotr Łużecki

Ponownie, nie chodziło o utworzenie niestandardowego menu rozwijanego, ale o dodanie dopełnienia. Dałem prostą podstawę dla OP, na której można budować zgodnie z ich wymaganiami, nie utworzę jednak dla nich niestandardowej kontroli. =)
DeeKayy90

1
Jeśli zamierzasz przejść z rozwijaną listą UL / LI, sugerowałbym po prostu użycie rozwijanego widżetu Bootstrap. Obsługa wersji 2 i 3 role = "menu" i role = "navigation", aby włączyć klawisze strzałek. Sensowne jest używanie czegoś, co zostało dobrze sprawdzone przez IMO.
mbokil

@mbokil +1, zdecydowanie dobra opcja, zamiast wymyślać koło na nowo, użyj tego, co tam jest.
DeeKayy90

2

To nie działa na optionwejściu, ponieważ jest to menu rozwijane wygenerowane przez system, ale możesz ustawić paddingwybór.

Po prostu zresetuj box-sizingwłaściwość do content-boxw swoim CSS.

Wartość domyślna selectto border-box.

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

możesz ustawić dopełnienie zaznaczenia - działa idealnie w Chrome 75
danday74

1

Mam małą sztuczkę na twój problem. Ale do tego musisz użyć javascript. Jeśli wykryłeś, że przeglądarka to Chrome, wstaw " fikcyjne " opcje między każdą opcją. Daj nową klasę dla tych „ fikcyjnych ” opcji i wyłącz je. Wysokość opcji „ dummy ”, które można zdefiniować za pomocą właściwości font-size .

CSS:

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

Scenariusz:

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

Nie dopełnienie, ale jeśli Twoim celem jest po prostu zwiększenie rozmiaru, możesz zwiększyć font-size. Używanie go z font-size-adjustzmniejsza rozmiar czcionki z powrotem do normalnego przy zaznaczaniu, a nie w opcjach, więc kończy się na optionpowiększaniu.

Nie jestem pewien, czy działa we wszystkich przeglądarkach, czy będzie działać w aktualnej wersji.

Przetestowano na Chrome 85 i Firefox 81.

zrzut ekranu (w przeglądarce 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

No Jquery - brak pliku js innej firmy

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>

inteligentny kod - użyj jquery


0

Dowolne wcięcie dowolnej opcji

Jeśli chcesz tylko wciskać losowe, dowolne <option />elementy, możesz użyć &nbsp;, który ma największą kompatybilność między przeglądarkami z opublikowanych tutaj rozwiązań ...

.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>

Uporządkowane wcięcie opcji

Ale jeśli masz jakąś posortowaną, uporządkowaną strukturę swoich danych, zaleca się użycie <optgroup/>składni ....

Element HTML tworzy grupę opcji w elemencie. (Źródło: 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>

Niestety, tylko jeden <optgroup />poziom jest obecnie dozwolony i obecnie obsługiwany przez przeglądarki. (Źródło: w3.org .) Osobiście uważałbym , że ta część specyfikacji jest zepsuta, ale zawsze można rozszerzyć poziom wcięcia na trzeci, czwarty itd., Używając powyższej &nbsp;sztuczki.


-2

font-sizeJeśli potrzebujesz, możesz użyć właściwości dla opcji.


Wygląda na to, że działa w Chrome, ale nie w Firefoksie (najnowsza wersja). Firefox nadal kieruje styl tylko na niewybrane pole przed listą rozwijaną.

-8

Po prostu ustaw wysokość zaznaczonej tagu

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

To po prostu powtórz to, co powiedziały inne odpowiedzi, czy możesz dać coś nowego?
Tiw

-9

Powinieneś kierować się na wybór dla swojego arkusza CSS zamiast opcji wyboru.

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

Zobacz ten artykuł Styling Select Box z CSS3 aby uzyskać więcej opcji stylizacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.