Entfernen Sie den Umriss aus dem Auswahlfeld in FF

97

Ist es möglich, die gepunktete Linie um ein ausgewähltes Element in einem ausgewählten Element zu entfernen?

Alt-Text

Ich habe versucht, das hinzuzufügen outline Eigenschaft in CSS aber es hat nicht funktioniert, zumindest nicht in FF.

<style>
   select { outline:none; }
</style>

Update
Bevor Sie fortfahren und die Gliederung entfernen, lesen Sie diese bitte.
http://www.outlinenone.com/

Martin
quelle
Vor drei Monaten habe ich nach dem gleichen gesucht, aber mit einem Optionsfeld. Über fünf oder sechs verschiedene Lösungen, die ich gefunden habe, hat nichts funktioniert. Ich vermute also, dass Sie das nicht können. Ich hoffe ich liege falsch.
Arseni Mourzenko
Ich fürchte, das ist auch so, aber ich hoffe immer noch, dass ich mich als falsch erweisen kann: D
Martin
Gibt es tatsächlich Menschen, die bei Mozilla arbeiten und denken, dass diese dumme gepunktete Linie gut aussieht? Warum müssen wir das überhaupt entfernen?
Billynoah

Antworten:

74

Ich habe eine Lösung gefunden, aber sie ist die Mutter aller Hacks. Hoffentlich dient sie als Ausgangspunkt für andere robustere Lösungen. Der Nachteil (meiner Meinung nach zu groß) ist, dass jeder Browser, der nicht unterstützttext-shadow aber unterstützt rgba(IE 9), den Text nur dann rendert, wenn Sie eine Bibliothek wie Modernizr verwenden (nicht getestet, nur eine Theorie).

Firefox verwendet die Textfarbe, um die Farbe des gepunkteten Rahmens zu bestimmen. Sagen Sie also, wenn Sie ...

select {
  color: rgba(0,0,0,0);
}

Firefox macht den gepunkteten Rand transparent. Aber natürlich ist Ihr Text auch transparent! Also müssen wir den Text irgendwie anzeigen. text-shadowkommt zur Rettung:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Wir setzen einen Textschatten ohne Versatz und ohne Unschärfe, so dass der Text ersetzt wird. Natürlich verstehen ältere Browser nichts davon, daher müssen wir einen Fallback für die Farbe bereitstellen:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Dies ist, wenn IE9 ins Spiel kommt: Es unterstützt, rgbaaber keinen Textschatten, so dass Sie ein scheinbar leeres Auswahlfeld erhalten. Holen Sie sich Ihre Version von Modernizr mit text-shadowErkennung und tun Sie ...

.no-textshadow select {
  color: #000;
}

Genießen.

Methode der Aktion
quelle
Danke Kumpel, ich werde es bald versuchen :)
Martin
Die einzige Lösung, die tatsächlich funktioniert (mit FF 20). Herzliche Glückwünsche!
Gilberto Torrezan
4
Dies sollte sich um jeden FF und nur um FF kümmern:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen
Wird es das CSS in Chrome und anderen Browsern beeinflussen?
Dadhich Sourav
165

Nun, Duopixels Antwort ist einfach perfekt. Wenn wir noch einen Schritt weiter gehen, können wir es kugelsicher machen.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Los geht's, nur gültig für Firefox und der hässliche gepunktete Umriss um die ausgewählte Option ist verschwunden.

Fleischwolf
quelle
1
Interessanterweise ist diese Lösung als Antwort von Duopixel nicht ganz kugelsicher. Wenn Sie mit Ihrem Auswahlfeld einen Übergangseffekt verwenden (z. B. -moz-Übergang), wird das gepunktete Feld für die Dauer des Übergangs angezeigt und verschwindet dann. Wenn Sie also '-moz-Transition: all 0.5s easy;' angeben, wird die Combobox mit dieser Lösung eine halbe Sekunde lang angezeigt, während Sie sie mit der Antwort von Duopixel überhaupt nicht sehen würden. Sie können dies umgehen, indem Sie das gesamte Auswahlelement auf ein transparentes Farbattribut einstellen. Dann wird jedoch überhaupt kein Text angezeigt, wenn das Feld keinen Fokus hat.
Jon
1
Bearbeiten: Das obige sollte sagen, "... Sie werden die gepunktete Box für eine halbe Sekunde mit dieser Lösung sehen ...". Ich kann den Kommentar nicht mehr bearbeiten. Wie auch immer, die 'Farbe: rgba (0,0,0,0);' Eigenschaft ist das, was den Übergang behebt, und sie muss sich im select-Element befinden. '-moz-focusring' reicht nicht aus. Interessanterweise habe ich aus irgendeinem Grund auch in IE9 und Chrome keinerlei Probleme mit der Duopixel-Lösung, sodass das, worüber er am Ende mit Modernizr sprach, für mich völlig unnötig war.
Jon
Natürlich wird es angezeigt, wenn Sie einen Übergang angeben. Die Verwendung allinnerhalb von Übergängen ist wie das Schießen mit einer Gatling-Waffe im Fluge.
Fleischwolf
1
Diese oder die Lösung von Duopixel funktioniert in FF 33.0.3 in Mac Mavericks nicht. Anstelle eines gepunkteten Umrisses gibt es einen blau unscharfen Umriss.
Timo Kähkönen
1
Dadurch werden die Browser-Stile für deaktivierte Optionen unterbrochen. Sobald die Auswahl fokussiert ist, werden sie schwarz anstelle des ausgegrauten Textes, den sie haben sollten.
Billynoah
19

Hier finden Sie eine Zusammenstellung von Lösungen zur Behebung von Stilproblemen mit Firefox-Auswahlfeldern. Verwenden Sie diesen CSS-Selektor als Teil Ihres üblichen CSS-Resets.

Die Klasse entfernt die Gliederung gemäß der Frage, aber auch alle Hintergrundbilder (da ich normalerweise einen benutzerdefinierten Dropdown-Pfeil verwende und der Dropdown-Pfeil des Firefoxes-Systems derzeit nicht entfernt werden kann). Wenn Sie ein Hintergrundbild für etwas anderes als ein Dropdown-Bild verwenden, entfernen Sie einfach die Liniebackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}
Wayne Dunkley
quelle
Gibt es überhaupt noch eine Optionstextfarbe mit dieser Methode zu definieren?
user1063287
Tatsächlich können Sie Firefox-Pfeile entfernen, die im SELECT-Hintergrund verwendet werden, indem Sie die herstellerspezifische Eigenschaft -moz-appearanceauf setzen none.
Emanuele Del Grande
Anderen Antworten fehlt der wichtige select::-moz-focus-innerSelektor, wodurch sie weniger effektiv sind. Deshalb bekommt dieser mein ⬆.
Dave Land
select:-moz-focusringzusammen mit color: transparentund text-shadow: 0 0 0 #000entfernte die nervige Grenze auf Fokus in Firefox v63
Jason Moore
Hinweis: URL-Präfix (). fxsitecompat.dev/en-CA/docs/2018/… Beim Lesen der Links ist mir nicht klar, ob sie auslaufen werden oder nicht. Aber sei beraten.
user3342816
10

Im Allgemeinen können Formularsteuerelemente nicht mit dieser Genauigkeit formatiert werden. Mir ist kein Browser bekannt, der einen sinnvollen Bereich von Eigenschaften in allen Steuerelementen unterstützt. Das ist der Grund, warum es eine Unmenge von JavaScript-Bibliotheken gibt, die Formularsteuerelemente mit Bildern und anderen HTML-Elementen "fälschen" und ihre ursprüngliche Funktionalität mit Code emulieren:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...

Álvaro González
quelle
Thx, ich denke, ich muss "meine eigene" Auswahlliste erstellen, um dies zu erreichen. Schade, dass die Formularsteuerelemente in allen Browsern nicht einheitlicher sind.
Martin
1
@ Martin: Das ist nichts auf die Inflexibilität einer Steuer Datei - Upload zu vergleichen, die nicht gestylt werden können überhaupt in den meisten Browsern. ;)
Arseni Mourzenko
9

Dies zielt auf alle Firefox-Versionen ab

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Möglicherweise möchten Sie das! Wichtige entfernen, wenn Sie planen, dass die Gliederung auf anderen Seiten Ihrer Website angezeigt wird, die dasselbe Stylesheet verwenden.

Kyzer
quelle
Dies sollte die ausgewählte Antwort sein
brandonscript
3

<select onchange="this.blur();">

Wenn Sie dies verwenden, bleibt der Rahmen so lange bestehen, bis Sie ein Element aus der Liste auswählen.

Malitta
quelle
2
Leider beachtet diese Lösung nicht die Richtlinien für Barrierefreiheit und Benutzerfreundlichkeit. Neben TTS-Schnittstellen für blinde Benutzer ist die Tastaturnavigation nicht zulässig. Fokussierte Elemente sollten anders aussehen als andere. Das Problem bei der aktuellen Frage ist, dass Sie in Firefox nicht entscheiden können, wie.
Emanuele Del Grande
1

Probieren Sie eines davon aus:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Referenz

Wels
quelle
6
Danke für die Mühe, aber leider hat es nicht funktioniert. Vielleicht funktioniert es bei einem aElement, aber bei einem selectElement nicht.
Martin
1

Hier kommt die Lösung

:focus {outline:none;}
::-moz-focus-inner {border:0;}
Faizan
quelle
1
Geprüft. Funktioniert nicht Firefox erkennt diese Eigenschaft, scheint aber nichts zu tun. 10px solid redIch habe versucht, es einzustellen, und ich kann nicht finden, wo es angezeigt wird.
Mpen
Dies funktionierte tatsächlich für mich, als alle anderen Antworten mit höheren Stimmen dies nicht taten.
Tashows
0

Entfernen Sie den Umriss / gepunkteten Rand von Firefox All Selectable Tags.

Fügen Sie diese Codezeile in Ihr Stylesheet ein:

*:focus{outline:none !important;}   
Hasnain Mehmood
quelle
0

Randstil hinzufügen: Keine zu Ihrer Auswahl in CSS.

select {
border-style: none; }
Khwaja Abdul Ahad
quelle
-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

100% arbeiten

user2577904
quelle
-4

Dadurch wird der Fokus vom selectElement und der Gliederung entfernt :

$("select").click(function(){
    $(this).blur();
});

Dies ist jedoch nicht ohne Mängel bei anderen Browsern. Sie sollten den Browser überprüfen, den der Benutzer verwendet:

if (FIREFOX) {
    //implement the code
}
Moses Dike Okore
quelle
Bitte erläutern Sie, was Ihr Code-Snippet zusätzlich zur Bereitstellung des Code-Snippets bewirkt.
Sayan