Я хотел бы иметь альтернативу стандартному флажку - в основном я хотел бы использовать изображения и когда пользователь щелкает изображение, затемняет его и накладывает флажок.
По сути, я хочу сделать что-то похожее на Recaptcha 2, когда он заставляет вас нажимать на изображения, которые соответствуют определенным критериям. Вы можете увидеть демо Recaptcha здесь, но это может иногда заставить вас решать текстовые вопросы, в отличие от выбора изображения. Итак, вот скриншот:
Когда вы щелкаете одно из изображений (в данном случае, содержащее изображение стейка), изображение, которое вы щелкаете, уменьшается в размере, и появляется синяя отметка, указывающая, что вы отметили его.
Допустим, я хочу воспроизвести этот точный пример.
Я понимаю, что могу иметь 9 скрытых флажков и прикрепить некоторые jQuery так, чтобы, когда я щелкаю изображение, он выбирал / снимал флажок скрытого. Но как насчет сжатия изображения / наложения галочки?
источник
:before
магию для изображения галочки?Ответы:
Чисто семантическое решение HTML / CSS
Это легко реализовать самостоятельно, заранее не требуется готовое решение. Кроме того, это многому вас научит, так как вам не слишком легко работать с CSS.
Это то, что вам нужно сделать:
Ваши флажки должны иметь различные
id
атрибуты. Это позволяет вам подключиться<label>
к нему, используя меткуfor
-attribute.Пример:
Прикрепление ярлыка к флажку вызовет поведение браузера: всякий раз, когда кто-то щелкает ярлык (или изображение внутри него), флажок будет переключаться.
Далее вы скрываете флажок, применяя, например,
display: none;
к нему.Теперь все, что осталось сделать, это установить стиль, который вы хотите для своего
label::before
псевдоэлемента (который будет использоваться в качестве элементов замены визуального флажка):В последнем сложном шаге вы используете
:checked
псевдо-селектор CSS , чтобы изменить изображение, когда флажок установлен:+
( Смежный селектор родственный ) гарантирует , что вы изменить только метки , которые непосредственно следуют скрытый флажок в разметке.Вы можете оптимизировать это, помещая оба изображения в карту спрайта и применяя только изменение
background-position
вместо замены изображения.Конечно, вам нужно правильно расположить этикетку и применить
display: block;
и установить правильноwidth
иheight
.Редактировать:
В примере с фрагментом кода и фрагменте кода, которые я создал после этих инструкций, используется та же методика, но вместо использования изображений для флажков, замены флажков выполняются исключительно с помощью CSS , создавая
::before
метку на ярлыке, который после проверкиcontent: "✓";
. Добавьте несколько скругленных границ и приятных переходов, и результат действительно приятен!Вот рабочий код, который демонстрирует технику и не требует изображений для флажка:
Вот тот же код в фрагменте:
источник
:hover
:)Чистое решение CSS
Вызваны три аккуратных устройства:
:checked
селектор::before
Псевдо-селекторcontent
.источник
<input type="radio" name="myRadio" id="myRadio1" />
также меняет свой css, чтобы скрыть маркер:input[type=radio]{display: none;}
Посмотрите этот плагин jQuery: imgCheckbox (на npm и bower )
Отказ от ответственности: Javascript не требуется для решения этой проблемы. Разрыв между ремонтопригодностью и эффективностью кода. Хотя нет необходимости в плагине (или любом javascript), он, безусловно, ускоряет его сборку и часто облегчает его изменение.
Barebones Решение:
С очень простым HTML (без всяких проблем с флажками, метками и т. Д.):
Вы можете использовать toQuClass класса jQuery, чтобы включить или выключить класс
selected
или событие:checked
click
Проверенные элементы выбираются с
Плюс Прохлада:
Вы можете стилизовать изображения на основе этого, но большая проблема в том, что без других элементов DOM вы даже не сможете использовать
::before
и::after
добавлять такие вещи, как галочки. Решение состоит в том, чтобы обернуть ваши изображения другим элементом (и имеет смысл присоединить прослушиватель щелчков к обернутому элементу).Это делает ваш HTML действительно чистым и невероятно читаемым. Посмотрите на фрагмент ...
Показать фрагмент кода
Используя плагин imgCheckbox jQuery:
Вдохновленный решением выше, я создал плагин, который можно использовать так же легко, как:
Посмотрите это в действии (и посмотрите источник )
источник
Я хотел бы добавить дополнительный div с
position: relative;
иclass="checked"
имеет ту же ширину / высоту, что и изображение, и положение, вleft: 0; top: 0;
котором находится значок. Это начинается сdisplay: none;
.Теперь вы можете прослушать
click
событие:Таким образом, вы можете получить значок, а также изменить размер изображения в меньшую сторону.
Обратите внимание: я просто хотел показать вам «логику» моих мыслей, этот пример может не работать или в нем есть ошибки.
источник
Я заметил, что другие ответы либо не используют
<label>
(почему нет?), Либо требуют соответствияfor
иid
атрибутов. Это означает, что если у вас есть конфликтующие идентификаторы, ваш код не будет работать, и вы должны помнить, чтобы каждый раз создавать уникальные идентификаторы.Кроме того, если вы скрываете с
input
помощьюdisplay:none
илиvisibility:hidden
, браузер не будет фокусироваться на этом.Флажок и его текст (или, в данном случае, изображение) можно заключить в метку:
источник
Вот быстрый пример выбора изображения как флажок
Обновленный пример с использованием Knockout.js:
источник
Чтобы расширить принятый ответ для тех, кто использует WordPress & GravityForms для создания своих форм и хочет автоматически заполнить поля флажков списком сообщений и связанных с ними избранных миниатюр
И CSS:
источник