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
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.
Innym rozwiązaniem, które działa we wszystkich przeglądarkach , jest dodanie 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.
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.
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.
@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.
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 .
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.
Jeśli chcesz tylko wciskać losowe, dowolne <option />elementy, możesz użyć , który ma największą kompatybilność między przeglądarkami z opublikowanych tutaj rozwiązań ...
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 sztuczki.
Odpowiedzi:
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/
źródło
do pierwszej opcji na liście wyboru, sprawdź to i to , Nadzieja pomaga.<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.Ten prosty hack spowoduje wcięcie tekstu. Działa dobrze.
select { text-indent: 5px; }
źródło
Wygląda na to że
Niestety, przeglądarki webkit nie obsługują jeszcze stylizacji tagów opcji.
możesz znaleźć podobne pytanie tutaj
Najczęściej używanym rozwiązaniem dla różnych przeglądarek jest użycie ul li
Mam nadzieję, że to pomoże!
źródło
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));
źródło
height: calc(1.2em + 24px);
nie jestmax-height: calc(1.2em + 24px);
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">   <li>Test</li> <li>Test 2</li> <li>Test 3</li> </ul>
Scenariusz:
$(document).ready(function(){ $("#customComboBox").click(function(){ $("li").toggle("slow"); }); });
PRÓBNY
źródło
To nie działa na
option
wejściu, ponieważ jest to menu rozwijane wygenerowane przez system, ale możesz ustawićpadding
wybór.Po prostu zresetuj
box-sizing
właściwość docontent-box
w swoim CSS.Wartość domyślna
select
toborder-box
.select { box-sizing: content-box; padding: 5px 0; }
źródło
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')); }
źródło
Nie dopełnienie, ale jeśli Twoim celem jest po prostu zwiększenie rozmiaru, możesz zwiększyć
font-size
. Używanie go zfont-size-adjust
zmniejsza rozmiar czcionki z powrotem do normalnego przy zaznaczaniu, a nie w opcjach, więc kończy się naoption
powię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.
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>
źródło
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
źródło
Dowolne wcięcie dowolnej opcji
Jeśli chcesz tylko wciskać losowe, dowolne
<option />
elementy, możesz użyć
, 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"> Sydney</option> <option value="melbourne" class="optionChild"> Melbourne</option> <option value="cromwell" class="optionChild"> Cromwell</option> <option value="queenstown" class="optionChild"> 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 ....<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
sztuczki.źródło
font-size
Jeśli potrzebujesz, możesz użyć właściwości dla opcji.źródło
Po prostu ustaw wysokość zaznaczonej tagu
select{ height: 30px; max-height: 30px; }
źródło
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.
źródło