Видаліть контур із поля для вибору в FF


97

Чи можна видалити пунктирну лінію, що оточує вибраний елемент у виділеному елементі?

alt текст

Я намагався додати outlineвластивість у CSS, але це не спрацювало, принаймні не в FF.

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

Оновлення
Перш ніж продовжувати видаляти контур, прочитайте це.
http://www.outlinenone.com/


три місяці тому я шукав те саме, але за допомогою перемикача. Понад п’ять-шість різних рішень, які я знайшов, нічого не спрацювало. Тож я підозрюю, що ти не можеш цього зробити. Сподіваюся, я помиляюся
Арсені Мурзенко

Я боюся, що це теж факт, але все ж сподіваюся, що буде доведено помилку: D
Мартін

Чи насправді в Mozilla працюють люди, які вважають, що дурна пунктирна лінія виглядає добре? Чому це взагалі те, що ми маємо прибрати?
billynoah

Відповіді:


74

Я знайшов рішення, але це мати всіх хаків, сподіваємось, воно послужить відправною точкою для інших більш надійних рішень. Недоліком (занадто великим, на мій погляд) є те, що будь-який браузер, який не підтримує, text-shadowале підтримує rgba(IE 9), не відображатиме текст, якщо ви не використовуєте бібліотеку, таку як Modernizr (не перевірено, лише теорія).

Firefox використовує колір тексту для визначення кольору пунктирної межі. Так скажіть, якщо ви робите ...

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

Firefox зробить пунктирну межу прозорою. Але звичайно ваш текст теж буде прозорим! Тому ми повинні якось відображати текст. text-shadowна допомогу приходить:

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

Ми ставимо тінь тексту без зміщення та розмиття, щоб вона замінила текст. Звичайно, старіший браузер нічого з цього не розуміє, тому ми повинні надати запасний варіант для кольору:

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

Це коли IE9 вступає в гру: він підтримує, rgbaале не text-shadow, тому ви отримаєте, мабуть, порожнє поле вибору. Отримайте свою версію Modernizr із text-shadowвиявленням і зробіть ...

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

Насолоджуйтесь.


Дякую, товаришу, я спробую якось скоро :)
Мартін,

Єдине рішення, яке насправді працює (за допомогою FF 20). Вітаємо!
Gilberto Torrezan

4
Це повинно подбати про кожну ФФ та лише про ФФ:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Тімо Кахконен

Чи вплине це на css у chrome та інших браузерах?
Dadhich Sourav

165

Що ж, відповідь Duopixel цілком досконала. Якщо ми підемо на крок далі, ми можемо зробити це куленепробивним.

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

Ось, дійсний лише для Firefox, і некрасивий пунктирний контур навколо вибраної опції зник.


1
Цікаво, що це рішення не зовсім куленепробивне, як відповідь Duopixel. Якщо ви використовуєте ефект переходу з вашим полем вибору (тобто -moz-перехід), пунктирне поле з'явиться на час переходу, а потім зникне. Отже, якщо ви вкажете «-moz-перехід: всі 0,5 секунди полегшуються;», ви побачите комбіноване поле на півсекунди з цим рішенням, тоді як ви взагалі не побачите його з відповіддю Duopixel. Ви можете обійти це, встановивши для всього елемента select прозорий атрибут кольору, але тоді ви взагалі не побачите жодного тексту, коли поле не має фокусу.
Джон,

1
Змінити: вищезазначене має сказати: "... ви побачите пунктирне вікно протягом півсекунди з цим рішенням ..." Я більше не можу редагувати коментар. У будь-якому випадку, 'color: rgba (0,0,0,0);' властивість - це те, що фіксує перехід, і воно повинно бути в елементі select; '-moz-focusring' не спрацює. Також цікаво, чомусь у мене не виникає жодних проблем як в IE9, так і в Chrome з рішенням Duopixel, тому ті речі, про які він говорив із Modernizr, наприкінці були для мене абсолютно непотрібними.
Джон

Звичайно, він з’явиться, якщо ви вкажете перехід. Використання allв межах переходів - все одно, що стріляти з пістолета Гатлінга на льоту.
Fleshgrinder

1
Це або рішення Duopixel не працює у FF 33.0.3 у Mac Mavericks. Замість пунктирного контуру є синій розмитий контур.
Timo Kähkönen

1
це порушує стилі браузера для вимкнених параметрів - після того, як виділені у фокусі вони стають чорними, а не сірим текстом, яким вони повинні бути.
білліноах

19

Ось співпраця рішень для виправлення проблем зі стилем за допомогою вікон для вибору Firefox. Використовуйте цей селектор CSS як частину вашого звичайного скидання CSS.

Клас видаляє контур відповідно до запитання, а також видаляє будь-яке фонове зображення (оскільки я зазвичай використовую спеціальну стрілку спадного меню, а стрілку спадного меню системи Firefoxes наразі не можна видалити). Якщо ви використовуєте фонове зображення для будь-чого іншого, крім випадаючого, просто видаліть рядокbackground-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;
    }
}

Чи можна все-таки визначити колір тексту опції за допомогою цього методу?
user1063287

Насправді ви можете видалити стрілки Firefox, що використовуються у фоновому режимі SELECT, встановивши для властивості постачальника -moz-appearanceзначення none.
Емануеле Дель Гранде

Інші відповіді не мають важливого select::-moz-focus-innerселектора, що робить їх менш ефективними. Ось чому цей отримує мій ⬆.
Dave Land

select:-moz-focusringразом із прибраною межею фокусу у Firefox v63 color: transparentта text-shadow: 0 0 0 #000видаленою
Джейсон Мур

Примітка: url-префікс (). fxsitecompat.dev/en-CA/docs/2018/… Читаючи посилання, я не вважаю зрозумілим, збираються вони це поступово скасовувати чи ні. Але майте на увазі.
user3342816

9

Це буде націлено на всі версії Firefox

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

Можливо, ви захочете видалити!! Важливо, якщо ви плануєте, щоб контур відображався на інших сторінках вашого сайту, які використовують ту саму таблицю стилів.


1
Це має бути вибрана відповідь
brandonscript

9

Загалом елементи керування формою неможливо стилізувати з такою мірою точності. Я не знаю жодного браузера, який підтримує розумний діапазон властивостей у всіх елементах управління. Ось чому існує мільйон бібліотек JavaScript, які "підробляють" елементи керування формою із зображеннями та іншими елементами HTML і імітують їх початкову функціональність за допомогою коду:

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

...


Thx, я думаю, я повинен "зробити свій власний" список вибору, щоб досягти цього. Шкода, що елементи керування формою не є більш уніфікованими в браузерах.
Мартін

1
@Martin: це не що інше , по порівнянні з негнучкістю управління завантаженням файлу, який не може бути стилізованої взагалі в більшості браузерів. ;)
Арсені Мурзенко

3

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

Якщо ви використовуєте це, межа залишається, доки ви не вибрали елемент зі списку.


2
На жаль, це рішення не дотримується вказівок щодо доступності та зручності використання. Окрім інтерфейсів TTS для незрячих користувачів, він забороняє навігацію по клавіатурі. Зосереджені елементи повинні виглядати інакше, ніж інші. Проблема поточного питання полягає в тому, що Firefox не дозволяє вирішувати, як.
Емануеле Дель Гранде

1

Спробуйте один із таких:

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

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

Довідково


6
Thx за зусилля, але, на жаль, це не спрацювало. Можливо, це працює на aелемент, але не працює на selectелемент.
Мартін

1

Ось рішення

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
Випробуваний. Не працює. Firefox розпізнає цю властивість, але, здається, вона нічого не робить. Спробував встановити його, 10px solid redі я не можу знайти, де це відображається.
mpen

Це насправді спрацювало для мене, коли всі інші відповіді, які проголосували вище, не спрацювали.
Tashows

0

Видаліть контур / пунктирну межу з усіх тегів Firefox.

Помістіть цей рядок коду у таблицю стилів:

*:focus{outline:none !important;}   



-4

Це видалить фокус з selectелемента та контуру :

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

Хоча це не позбавлено недоліків інших браузерів. Ви захочете перевірити браузер, яким користується користувач:

if (FIREFOX) {
    //implement the code
}

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