Я пытаюсь оформить флажок с помощью следующего:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Но стиль не применяется. Флажок по-прежнему отображает стиль по умолчанию. Как мне придать ему указанный стиль?
Ответы:
ОБНОВИТЬ:
Приведенный ниже ответ ссылается на положение дел до появления широко распространенного CSS 3. В современных браузерах (включая Internet Explorer 9 и более поздние версии) проще создавать замены флажков с использованием предпочитаемого вами стиля без использования JavaScript.
Вот несколько полезных ссылок:
Стоит отметить, что фундаментальная проблема не изменилась. Вы по-прежнему не можете применять стили (границы и т. Д.) Непосредственно к элементу флажка, и эти стили влияют на отображение флажка HTML. Однако изменилось то, что теперь можно скрыть фактический флажок и заменить его собственным элементом в стиле, используя только CSS. В частности, поскольку CSS теперь имеет широко поддерживаемый
:checked
селектор, вы можете сделать так, чтобы ваша замена корректно отражала проверенный статус поля.СТАРЫЙ ОТВЕТ
Вот полезная статья о флажках стиля . По сути, этот автор обнаружил, что он сильно варьируется от браузера к браузеру, и что многие браузеры всегда отображают флажок по умолчанию, независимо от того, как вы его стилизуете. Так что на самом деле не так просто.
Нетрудно представить обходной путь, при котором вы бы использовали JavaScript для наложения изображения на флажок, а щелчки по этому изображению приводили к тому, чтобы был установлен настоящий флажок. Пользователи без JavaScript увидят флажок по умолчанию.
Отредактировано, чтобы добавить: вот хороший сценарий, который делает это для вас ; он скрывает элемент реального флажка, заменяет его стилизованным диапазоном и перенаправляет события щелчка.
источник
Есть способ сделать это, используя только CSS. Мы можем (ab) использовать
label
элемент и стиль этого элемента вместо этого. Предостережение заключается в том, что это не будет работать для Internet Explorer 8 и более ранних версий.источник
input
клавиши никогда не фокусируются на клавиатуре, поэтому они недоступны с клавиатуры.Вы можете достичь довольно прохладной пользовательского флажок эффекта, используя новые возможности , которые приходят с
:after
и:before
псевдо классами. Преимущество этого в том, что вам не нужно ничего добавлять в DOM, только стандартный флажок.Обратите внимание, что это будет работать только для совместимых браузеров. Я считаю, что это связано с тем, что некоторые браузеры не позволяют устанавливать
:after
и:before
вводить элементы. К сожалению, это означает, что на данный момент поддерживаются только браузеры WebKit. Firefox + Internet Explorer по-прежнему будет разрешать работу флажков, просто не применяя стиль, и, надеюсь, это изменится в будущем (код не использует префиксы поставщиков).Это только решение для браузера WebKit (Chrome, Safari, мобильные браузеры)
Смотрите пример Fiddle
Бонусная скрипка Flipwitch в стиле Webkit
источник
Прежде чем начать (по состоянию на январь 2015 года)
Оригинальный вопрос и ответ сейчас ~ 5 лет. Таким образом, это немного обновление.
Во-первых, существует множество подходов, когда дело доходит до стилизации флажков. Основной принцип:
Вам нужно будет скрыть элемент управления флажок по умолчанию, который стилизован вашим браузером, и не может быть переопределен каким-либо значимым способом с помощью CSS.
Со скрытым элементом управления вам все равно нужно будет иметь возможность обнаруживать и переключать его проверенное состояние
Проверенное состояние флажка должно быть отражено с помощью стилизации нового элемента.
Решение (в принципе)
Вышесказанное может быть достигнуто несколькими способами - и вы часто будете слышать, что использование псевдоэлементов CSS3 - правильный путь. На самом деле, нет правильного или неправильного пути, это зависит от подхода, наиболее подходящего для контекста, в котором вы будете его использовать. Тем не менее, у меня есть предпочтительный.
Заверните свой флажок в
label
элемент. Это будет означать, что даже когда он скрыт, вы все равно можете переключать его проверенное состояние, щелкая в любом месте метки.Скрыть свой флажок
Добавьте новый элемент после флажка, который вы будете соответствующим образом стилизовать. Он должен появиться после флажка, поэтому его можно выбрать с помощью CSS и стилизовать в зависимости от
:checked
состояния. CSS не может выбрать «назад».Решение (в коде)
Показать фрагмент кода
Уточнение (с помощью значков)
Но эй! Я слышу, как ты кричишь. А что, если я хочу показать симпатичную галочку или крестик в коробке? И я не хочу использовать фоновые изображения!
Ну, вот где псевдоэлементы CSS3 могут вступить в игру. Они поддерживают
content
свойство, которое позволяет вводить значки Unicode, представляющие любое состояние. В качестве альтернативы, вы можете использовать сторонний источник значков шрифтов, такой как font awesome (хотя убедитесь, что вы также установили соответствующийfont-family
, например,FontAwesome
)источник
display: none
.visibility: hidden;
на,opacity: 0 !important;
если у вас все еще есть проблемы с табуляции.Я бы последовал совету ответа SW4 - чтобы скрыть флажок и покрыть его пользовательским диапазоном, предлагая этот HTML:
Обтекание метки аккуратно позволяет щелкать текст без необходимости связывания атрибута «for-id». Однако,
Не скрывайте это с помощью
visibility: hidden
илиdisplay: none
Это работает, нажав или нажав, но это неэффективный способ использовать флажки. Некоторые люди до сих пор используют гораздо более эффективныеTab для перемещения фокуса, Spaceдля активации, а скрытие с помощью этого метода отключает его. Если форма длинная, можно сохранить чьи-то запястья для использования
tabindex
илиaccesskey
атрибуты. И если вы наблюдаете поведение системного флажка, то при наведении появляется приличная тень. Хорошо стилизованный флажок должен следовать за этим поведением.ответ кобербоя рекомендует Font Awesome, который обычно лучше растрового изображения, поскольку шрифты являются масштабируемыми векторами. Работая с HTML выше, я бы предложил следующие правила CSS:
Скрыть флажки
Я использую только негатив,
z-index
так как мой пример использует достаточно большую обложку флажка, чтобы полностью покрыть его. Я не рекомендую,left: -999px
так как он не может быть повторно использован в каждом макете. Ответ Бушана Вагха обеспечивает пуленепробиваемый способ скрыть это и убедить браузер использовать tabindex, так что это хорошая альтернатива. Во всяком случае, оба это просто взломать. Правильный путь сегодняappearance: none
, см . Ответ Джоста :Метка флажка стиля
Добавить скин флажка
\00f096
это шрифт Awesome'ssquare-o
, отступы настраиваются так, чтобы обеспечить четкий контур на фокусе (см. ниже).Добавить флажок отмеченный скин
\00f046
это Font Awesome'scheck-square-o
, ширина которого не равнаsquare-o
, что является причиной стиля ширины, указанного выше.Добавить контур фокуса
Safari не предоставляет эту функцию (см. Комментарий @Jason Sankey), вы должны использовать
window.navigator
чтобы обнаружить браузер и пропустить его, если это Safari.Установить серый цвет для отключенного флажка
Установить тень при наведении на флажок без отключения
Демо Фиддл
Попробуйте навести курсор мыши на флажки и использовании Tabи Shift+ Tabдля перемещения и Spaceдля переключения.
источник
Вы можете стилизовать флажки с небольшой хитростью, используя
label
элемент, пример которого приведен ниже:И FIDDLE для приведенного выше кода. Обратите внимание, что некоторые CSS не работают в старых версиях браузеров, но я уверен, что есть несколько интересных примеров JavaScript!
источник
Простое в реализации и легко настраиваемое решение
После долгих поисков и испытаний я получил это решение, которое легко внедрить и настроить. В этом решении :
Просто поместите текущий CSS вверху страницы, и стиль всех флажков изменится следующим образом:
источник
Вы можете избежать добавления дополнительной разметки. Это работает везде, кроме IE для рабочего стола (но работает в IE для Windows Phone и Microsoft Edge) через настройку CSS
appearance
:источник
Я предпочитаю использовать иконки шрифтов (например, FontAwesome), поскольку их цвета легко изменить с помощью CSS, и они действительно хорошо масштабируются на устройствах с высокой плотностью пикселей. Итак, вот еще один чистый вариант CSS, использующий методы, аналогичные приведенным выше.
(Ниже приведено статическое изображение, поэтому вы можете визуализировать результат; см. JSFiddle для интерактивной версии.)
Как и в других решениях, он использует
label
элемент. Смежныйspan
содержит наш флажок символ.Вот JSFiddle для этого.
источник
font-family: FontAwesome;
сfont-family: 'Font Awesome\ 5 Free';
, и обновлять содержимое юникода , если вы хотите , чтобы заставить его работать в новой версии.Недавно я нашел довольно интересное решение проблемы.
Вы можете использовать,
appearance: none;
чтобы отключить стиль по умолчанию, а затем написать свой собственный, как описано здесь (Пример 4) .Пример скрипки
Показать фрагмент кода
К сожалению, поддержка браузера довольно плохая для этой
appearance
опции. Из моего личного тестирования у меня только Opera и Chrome работают правильно. Но это был бы способ сохранить простоту, когда приходит лучшая поддержка или вы хотите использовать только Chrome / Opera."Могу ли я использовать?" ссылка на сайт
источник
appearance
это как раз то, что нам нужно для этого; просто имейте в виду, что это «нестандартно и не соответствует стандартам» .С чистым CSS, ничего особенного
:before
и:after
без преобразований, вы можете отключить внешний вид по умолчанию, а затем оформить его с помощью встроенного фонового изображения, как показано в следующем примере. Это работает в Chrome, Firefox, Safari и теперь Edge (Chromium Edge).источник
Мое решение
источник
Вы можете просто использовать
appearance: none
в современных браузерах, чтобы не было стилей по умолчанию и все ваши стили применялись правильно:источник
Хотите НЕТ JavaScript, НЕТ внешних библиотек, соответствия доступности, а также флажков и радиокнопок?
Я прокручивал и прокручивал, и тонны этих ответов просто выбрасывают доступность и нарушают WCAG более чем одним способом. Я включил переключатели, так как большую часть времени, когда вы используете настраиваемые флажки, вы также хотите использовать настраиваемые переключатели.
Скрипки :
Поздно к вечеринке, но каким-то образом это все еще сложно в
2019–2020 годах,поэтому я добавил свои три решения, которые доступны и легко доступны .Все это JavaScript бесплатно , внешняя библиотека бесплатно * , и доступ к ...
Если вы хотите подключиться к любому из них, просто скопируйте таблицу стилей из скрипок, отредактируйте цветовые коды в CSS, чтобы они соответствовали вашим потребностям, и вы уже в пути. Вы можете добавить собственный значок галочки svg, если вы хотите для флажков. Я добавил много комментариев для тех, кто не из CSS'ы.
Если у вас длинный текст или небольшой контейнер и вы столкнулись с переносом текста под флажком или переключателем, просто конвертируйте в div, как это .
Более подробное объяснение: мне нужно решение, которое не нарушает WCAG, не зависит от JavaScript или внешних библиотек, и которое не нарушает навигацию клавиатуры, такую как вкладки или пробел, чтобы выбрать, которое позволяет фокусировать события, решение, которое позволяет отключить флажки, которые оба проверены и бесконтрольно, и , наконец, решение , в котором я могу настроить внешний вид флажка , однако я хочу с различными
background-color
«s,border-radius
,svg
фоны и т.д.Я использовал комбинацию этого ответа от @Jan Turoň, чтобы придумать собственное решение, которое, кажется, работает очень хорошо. Я сделал скриптовую кнопку с переключателями, которая использует много одинакового кода из флажков, чтобы сделать эту работу также с переключателями.
Я все еще изучаю доступность, поэтому, если я что-то пропустил, пожалуйста, оставьте комментарий, и я постараюсь исправить это, вот пример кода моих флажков:
источник
Вот простое решение CSS без кода jQuery или JavaScript.
Я использую значки FontAwseome, но вы можете использовать любое изображение
источник
label
илиspan
элементов. Это просто работает!На мой взгляд, это самый простой способ для создания стиля флажка. Просто добавьте
:after
и:checked:after
CSS на основе вашего дизайна.источник
Измените стиль флажка с простым CSS3, не требуя никаких манипуляций с JS и HTML.
источник
Простой и легкий шаблон:
https://jsfiddle.net/rvgccn5b/
источник
input
s поддерживаются только в Chrome, код работает не во всех браузерах.Я думаю, что самый простой способ сделать это, стилизовать
label
и сделатьcheckbox
невидимым.HTML
CSS
checkbox
, Даже если он скрыт, по- прежнему будет доступен, и его значение будет отправлено , когда форма была отправлена. Для старых браузеров, возможно , придется изменить класс ,label
чтобы проверить с помощью JavaScript , потому что я не думаю , что старые версии Internet Explorer понять::checked
наcheckbox
.источник
::checked
неправильно - так и должно быть:checked
. (б)checkbox
неправильно - так и должно быть[type=checkbox]
Хлоп! Все эти обходные пути привели меня к выводу, что флажок HTML отстой, если вы хотите его стилизовать.
Как предупреждение, это не реализация CSS. Я просто подумала, что поделюсь обходным решением, которое я придумала на случай, если кто-то еще может найти его полезным.
Я использовал
canvas
элемент HTML5 .Плюсом этого является то, что вам не нужно использовать внешние изображения и, возможно, можно сэкономить некоторую полосу пропускания.
Недостатком является то, что если браузер по какой-то причине не может правильно его отобразить, то здесь нет отступления. Хотя вопрос о том, остается ли это проблемой в 2017 году, остается спорным.
Обновить
Я нашел старый код довольно некрасивым, поэтому я решил переписать его.
Вот рабочая демка .
В новой версии используются прототипы и дифференциальное наследование для создания эффективной системы создания флажков. Чтобы создать флажок:
Это немедленно добавит флажок в DOM и подключит события. Чтобы узнать, установлен ли флажок:
Также важно отметить, что я избавился от петли.
Обновление 2
В последнем обновлении я не упомянул, что использование холста имеет больше преимуществ, чем просто установка флажка, который выглядит так, как вы хотите. Вы также можете создавать флажки с несколькими состояниями , если хотите.
Я немного изменил
Checkbox
использованный в последнем фрагменте код, чтобы он был более универсальным, что позволило «расширить» его с помощью флажка, который имеет 3 состояния. Вот демо . Как видите, он уже обладает большей функциональностью, чем встроенный флажок.Что нужно учитывать при выборе между JavaScript и CSS.
Старый, плохо разработанный код
Рабочая Демо
Во-первых, настроить холст
Затем разработайте способ обновления самого холста.
Последняя часть - сделать его интерактивным. К счастью, все довольно просто:
Здесь у вас могут возникнуть проблемы в IE из-за их странной модели обработки событий в JavaScript.
Я надеюсь, что это помогает кому-то; это определенно соответствовало моим потребностям.
источник
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
, состояния могут представлять «явное ложное», «явное истина», «использовать значение по умолчанию», например). Я подумываю добавить пример к ответу.Это самый простой способ, и вы можете выбрать, какие флажки придать этому стилю.
CSS:
HTML:
источник
Измените свой стиль флажка простым способом.
Вот ссылка JsFiddle
источник
Вот версия для CSS / HTML, никакой jQuery или JavaScript не требуется вообще, Простой и чистый HTML и действительно простой и короткий CSS.
Вот JSFiddle
http://jsfiddle.net/v71kn3pr/
Вот HTML-код:
Вот CSS
Это может быть адаптировано, чтобы иметь возможность иметь отдельные радио или флажки, группы флажков и группы переключателей, а также.
Этот html / css позволит вам также фиксировать щелчок на ярлыке, поэтому флажок будет отмечен и снят, даже если вы нажмете только на ярлык.
Этот тип переключателей / переключателей отлично работает с любой формой, без проблем. Были также протестированы с использованием PHP, ASP.NET (.aspx), JavaServer Faces и ColdFusion .
источник
источник
источник
Нет, вы по-прежнему не можете стилизовать сам флажок, но я (наконец) понял, как оформить иллюзию, сохраняя при этом функциональность щелчка флажка. Это означает, что вы можете переключать его, даже если курсор не совсем неподвижен, не рискуя выделять текст или вызывая перетаскивание!
Это решение, вероятно, также подходит для радио кнопок.
Следующее работает в Internet Explorer 9, Firefox 30.0 и Chrome 40.0.2214.91 и является лишь базовым примером. Вы все еще можете использовать его в сочетании с фоновыми изображениями и псевдоэлементами.
http://jsfiddle.net/o0xo13yL/1/
источник
Поскольку браузеры, такие как Edge и Firefox, не поддерживают теги ввода: before: after on, здесь есть альтернатива исключительно с HTML и CSS. Конечно, вы должны редактировать CSS в соответствии с вашими требованиями.
Сделайте HTML для флажка следующим образом:
Примените этот стиль для флажка, чтобы изменить цвет метки
источник
Кажется, вы можете изменить цвет флажка в оттенках серого, используя только CSS.
Следующее преобразует флажки из черного в серый (что было примерно то, что я хотел):
источник
Внедрение SCSS / SASS
Более современный подход
Для тех, кто использует SCSS (или легко конвертируется в SASS), будет полезно следующее. По сути, сделайте элемент рядом с флажком, который вы будете стилизовать. Когда флажок установлен, CSS изменяет стиль сестринского элемента (к вашему новому, проверенному стилю). Код ниже:
источник
Предупреждение : следующее было верно во время написания, но в то же время вещи прогрессировали.
Современные браузеры AFAIK отображают флажки с использованием встроенного элемента управления ОС, поэтому их невозможно стилизовать.
источник