Wählen Sie die Option Polsterung, die in Chrom nicht funktioniert

83

Wählen Sie die Option Polsterung, die in Chrom nicht funktioniert

<style>
select option { padding:5px 0px; }
</style>    
<select>
<option>1</option>
<option>2</option>
<option>3</option> 
</select>
Piyush Marvaniya
quelle
2
Was versuchst du zu erreichen? Jede der Optionen, die mit 5px aufgefüllt werden sollen? Oder nur die Hauptbox?
DeeKayy90
ja ... ich brauche Polsterung für Optionswert
Piyush Marvaniya
1
Auch wenn es sich nicht ausschließlich um Polsterung handelt, können Sie für die Polsterung der linken Polsterung & nbsp; während dies behoben wird: jsfiddle.net/chech/u5rcheqf/1
chech

Antworten:

135

Ich habe gerade einen Weg gefunden, die Polsterung auf den Auswahleingang anzuwenden

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

Scheint in der aktuellen Chrome 39.0.2171.71 (64-Bit) und Safari (ich habe dies nur auf einem Mac getestet) zu funktionieren.

Dies scheint das Standard-Styling zu entfernen, das der Auswahleingabe hinzugefügt wurde (es hat auch den Dropdown-Pfeil entfernt), aber Sie können dann Ihr eigenes Styling verwenden, ohne dass Chrom es überschreibt.

Ich bin auf dieses Update gestoßen, als ich Code von hier verwendet habe: http://fettblog.eu/style-select-elements/

rmmoul
quelle
1
Eine andere Lösung, die in allen Browsern funktioniert , ist das Hinzufügen &nbsp;zur ersten Option in der Auswahlliste. Überprüfen Sie dies und das . Hope hilft.
Shaijut
2
@stom Das könnte für die linke und rechte Polsterung funktionieren, aber ich denke nicht, dass es für die obere und untere Polsterung funktionieren würde.
Rmmoul
Das funktioniert zumindest in meiner Maschine nicht mehr! :)
Nuno Cruz
1
Sie können auch ein Plugin wie select2 oder selected verwenden , das Ihre <select><option/></select>Elemente in vollständig anpassbare <ul><li/></ul>Elemente konvertiert . Auf diese Weise können Sie alle Dropdowns so gestalten, dass sie mit Ihren anderen Eingabefeldern oder der allgemeinen Benutzeroberfläche übereinstimmen.
Tad Wohlrapp
3
Die Pfeile gehen damit verloren :(
Raul H
41

Dieser einfache Hack wird den Text einrücken. Funktioniert gut.

select {
  text-indent: 5px;
}
Matt
quelle
Perfekte Antwort. Hat perfekt funktioniert.
Hussnain Cheema
11
Dadurch wird die Auffüllung der Auswahl selbst hinzugefügt, nicht jedoch den Optionen. Und das Anwenden eines Texteinzugs auf eine Option funktioniert auch in Chrome 64 nicht.
chris.ribal
Chrome 71 nennt dies eine "unbekannte Eigenschaft".
Mark
7

Es scheint, dass

Leider unterstützen Webkit-Browser das Styling von Options-Tags noch nicht.

Möglicherweise finden Sie hier eine ähnliche Frage

  1. Wie wird das Optionselement eines ausgewählten Tags formatiert?
  2. Der Wert der Styling-Option in Dropdown-HTML-Auswahl funktioniert unter Chrome & Safari nicht

Die am weitesten verbreitete browserübergreifende Lösung ist die Verwendung von ul li

Ich hoffe es hilft!

Pravin Waychal
quelle
8
Danke für die Antwort. Es ist für mich erstaunlich, dass es nach so vielen Jahren, seit es Websites, HTML und CSS gibt, immer noch nicht in der Lage ist, Dinge wie das Auffüllen ausgewählter Optionen zu gestalten. Styling- und Positionierungselemente können so frustrierend sein, aber in der Android-Entwicklung ist es viel einfacher. Ich verstehe nicht, warum die Webumgebung mit HTML und CSS im Vergleich zu Desktop- und nativen mobilen Umgebungen so "unvollendet" erscheint, ein "Work-in-Progress".
Bryan
2
Vielleicht wäre das Web in naher Zukunft schöner und die Entwickler werden Hilfe von Shadow Dom erhalten - robdodson.me/shadow-dom-styles :) Hoffentlich erhalten Entwickler die Kontrolle über die innere Ebene der Formularelemente. RIP IE allerdings.
Pravin Waychal
2
@Bryan Web ist eine alte Technologie, und als solche hat es einige alte Ideen, die nicht verbessert wurden. Aufgrund der Browserunterstützung haben neue Funktionen immer nur langsam jemanden erreicht, und aufgrund mangelnder Intelligenz (es gibt bereits Problemumgehungen, die von Benutzern durchgeführt werden, und der Endbenutzer bemerkt nicht, dass diese Browser fehlen) ändert sich nichts.
csga5000
7

Ich habe es damit behoben

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));
Ali Sufyan
quelle
Dies ist bei weitem die beste Lösung, die ich bisher gesehen habe. Aber es hat nur bei mir funktioniert, wenn es height: calc(1.2em + 24px);nicht istmax-height: calc(1.2em + 24px);
Julius
Julius Ich bin überprüft, ob alle gängigen Browser mit maximaler Höhe gut funktionieren. Die Verwendung des Höhenattributs ist jedoch auch eine gute Gelegenheit.
Ali Sufyan
3

Sehr, sehr einfache Idee, aber Sie können sie entsprechend ändern. Dies ist nicht so eingerichtet, dass es gut aussieht, sondern nur, um die Idee zu liefern. Ich hoffe es hilft.

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>

Skript:

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

DEMO

DeeKayy90
quelle
1
@PiyushMarvaniya Ich verstehe, aber wie ich mich erinnere, ist es nicht möglich, einzelne Elemente mit der Auswahloption zu ändern. Deshalb habe ich eine Alternative angeboten.
DeeKayy90
1
Dieses Beispiel bietet keine Tastaturnavigation (Pfeile oder Mac-Verknüpfungen) und keine Tools für die Barrierefreiheit im Internet.
Piotr Łużecki
Auch hier ging es nicht darum, ein benutzerdefiniertes Dropdown-Menü zu erstellen, sondern das Auffüllen hinzuzufügen. Ich habe dem OP eine einfache Basis gegeben, auf der es entsprechend seinen Anforderungen aufbauen kann. Ich werde jedoch kein benutzerdefiniertes Steuerelement für sie erstellen. =)
DeeKayy90
1
Wenn Sie mit einem UL / LI-Dropdown-Menü arbeiten, würde ich empfehlen, nur das Dropdown-Widget von Bootstrap zu verwenden. Version 2 und 3 unterstützen role = "menu" und role = "navigation", um die Pfeiltasten zu aktivieren. Es ist sinnvoll, etwas zu verwenden, das IMO gut überprüft wurde.
mbokil
@mbokil +1, definitiv eine gute Option, anstatt das Rad neu zu erfinden, benutze, was da ist.
DeeKayy90
2

Das funktioniert bei der optionEingabe nicht, da es sich um ein vom System generiertes Dropdown-Menü handelt, aber Sie können die paddingAuswahl auswählen.

Setzen Sie die box-sizingEigenschaft einfach content-boxin Ihrem CSS auf zurück.

Der Standardwert von selectist border-box.

select {
 box-sizing: content-box;
 padding: 5px 0;
}
user7286228
quelle
Sie können die Polsterung einer Auswahl einstellen - funktioniert perfekt in Chrome 75
danday74
1

Ich habe einen kleinen Trick für dein Problem. Dafür müssen Sie jedoch Javascript verwenden. Wenn Sie festgestellt haben, dass der Browser Chrome ist, fügen Sie zwischen allen Optionen " Dummy " -Optionen ein. Geben Sie eine neue Klasse für diese " Dummy " -Optionen an und deaktivieren Sie sie. Die Höhe der " Dummy " -Optionen, die Sie mit der Eigenschaft " Schriftgröße " definieren können .

CSS:

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

Skript:

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'));
}
Ozsvar Istvan
quelle
0

Keine JQuery - Keine JS-Datei eines Drittanbieters

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>

Smart Code - Verwenden Sie jquery

Waruna Manjula
quelle
-2

Bei font-sizeBedarf können Sie die Eigenschaft als Option verwenden.

Rahul
quelle
Dies scheint in Chrome zu funktionieren, aber nicht in Firefox (neueste Version). Firefox zielt immer noch nur auf den Stil der nicht ausgewählten Box vor dem Dropdown.
-8

Stellen Sie einfach die Höhe des ausgewählten Tags ein

select{
    height: 30px;
    max-height: 30px;
}
Arpit Bansal
quelle
Dies ist nur eine Wiederholung dessen, was andere Antworten bereits gesagt haben. Könnten Sie dem etwas Neues geben?
Tiw
-9

Sie sollten auf die Auswahl für Ihr CSS anstatt auf die Auswahloption abzielen.

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

Diesen Artikel anzeigen Styling Select Box mit CSS3 für weitere Styling-Optionen.

Rachelle
quelle