У меня есть элемент изображения, который я хочу изменить при нажатии.
<img id="btnLeft">
Это работает:
#btnLeft:hover {
width:70px;
height:74px;
}
Но то, что мне нужно, это:
#btnLeft:onclick {
width:70px;
height:74px;
}
Но это не работает, очевидно. Можно ли вообще иметь onclick
поведение в CSS (т.е. без использования JavaScript)?
:active
работает, когда мышь не работает. В зависимости от того, что вы пытаетесь сделать, вы можете заставить его работать, используя псевдокласс CSS4:target
.:target
не является новым для Селекторов 4. Он был доступен начиная с Селекторов 3, который на момент написания уже был рекомендацией в течение года.Ответы:
Самое близкое, что вы получите
:active
:Однако этот стиль будет применяться только тогда, когда нажата кнопка мыши. Единственный способ применить стиль и оставить его примененным по клику - это использовать немного JavaScript.
источник
Ответ от 2019 года:
Лучший способ (на самом деле единственный способ *) имитировать фактическое событие нажатия, используя только CSS (вместо простого наведения на элемент или активизации элемента, когда у вас нет mouseUp ), - использовать хак с флажком . Это работает путем присоединения
label
к<input type="checkbox">
элементу черезfor=""
атрибут метки .Эта функция имеет широкую поддержку браузера (
:checked
псевдокласс IE9 +).Применить такое же значение , к
<input>
«s атрибут ID и сопровождающим<label>
» sfor=""
атрибута, и вы можете сказать браузеру , чтобы повторно стиле этикетки по щелчку с:checked
псевдо-класса, благодаря тому , что при нажатии на метку будет проверять и снимите «связанный»<input type="checkbox">
.* Вы можете смоделировать «выбранное» событие с помощью
:active
или:focus
псевдокласса в IE7 + (например, для кнопки, которая обычно50px
широка, вы можете изменить ее ширину, покаactive
:)#btnControl:active { width: 75px; }
, но это не настоящие события «щелчка». Они «живут» все время, когда элемент выбран (например, Tabс помощью клавиатуры), что немного отличается от события истинного щелчка, которое запускает действие - как правило -mouseUp
.Базовая демонстрация взлома флажков (базовая структура кода для того, что вы спрашиваете):
Показать фрагмент кода
Здесь я разместил метку сразу после ввода в моей разметке. Это сделано для того, чтобы я мог использовать соседний селектор ( +ключ), чтобы выбрать только метку, которая следует сразу за моим
#demo
флажком. Поскольку:checked
псевдокласс применяется к флажку, он#demo:checked + label
будет применяться только тогда, когда флажок установлен.Демонстрация изменения размера изображения при нажатии, о чем вы просите:
При этом , как говорится, есть это плохие новости. Поскольку ярлык может быть связан только с одним элементом управления формы за раз , это означает, что вы не можете просто вставить кнопку в
<label></label>
теги и вызвать ее в день. Тем не менее, мы можем использовать немного CSS, чтобы ярлык выглядел и вел себя довольно близко к тому, как выглядит и ведет себя кнопка HTML.Демонстрация для имитации эффекта нажатия кнопки, сверх того, что вы просите:
Показать фрагмент кода
Большая часть CSS в этой демонстрации предназначена только для стилизации элемента label. Если вам на самом деле не нужна кнопка , и достаточно старого элемента, тогда вы можете удалить почти все стили в этой демонстрации, аналогично моей второй демонстрации выше.
Вы также заметите, что у меня есть одно свойство с префиксом
-moz-outline-radius
. Некоторое время назад Mozilla добавила это удивительное неспецифическое свойство в Firefox, но ребята из WebKit решили, что , к сожалению, добавлять его не собираются . Так что считайте эту линию CSS просто прогрессивным улучшением для людей, которые используют Firefox.источник
:checked
.Вы можете использовать псевдокласс
:target
для имитации события нажатия, приведу пример.Вот как это выглядит: http://jsfiddle.net/TYhnb/
Стоит отметить, что это ограничено только гиперссылкой, поэтому, если вам нужно использовать другую ссылку, например, гиперссылку, например кнопку, вы можете немного ее взломать, например, стилизовать гиперссылку, чтобы она выглядела как кнопка.
источник
Если вы дадите элементу a,
tabindex
то вы можете использовать:focus
псевдокласс для имитации щелчка.HTML
CSS
http://jsfiddle.net/NaTj5/
источник
tabindex=-1
элемент все еще может быть сфокусирован, но только мышью, а не клавиатурой, что лучше в этом случае. Вы также можете использоватьoutline:0
стиль, чтобы убрать синюю рамку, когда сфокусированыИзменить: Ответил, прежде чем ОП уточнил, что он хотел. Следующее предназначено для onclick, похожего на javascripts onclick, а не для
:active
псевдокласса.Это может быть достигнуто только с помощью Javascript или Checkbox Hack
Хак с флажком, по сути, заставляет вас щелкнуть ярлык, который «проверяет» флажок, позволяя стилизовать ярлык по вашему желанию.
демо
источник
id
атрибуты для их связывания.TylerH сделал действительно хороший ответ, и мне просто пришлось обновить эту последнюю версию кнопки.
источник
Как насчет чистого решения CSS без хакерства?
@TylerH имеет отличный отклик, но это довольно сложное решение. У меня есть решение для тех из вас, кто просто хочет простой эффект "onclick" с чистым CSS без множества дополнительных элементов.
Мы просто будем использовать CSS-переходы. Вы могли бы сделать то же самое с анимацией.
Хитрость заключается в том, чтобы изменить задержку перехода, чтобы она продолжалась, когда пользователь щелкает.
Здесь я также добавляю класс "clicked", чтобы javascript мог также обеспечить эффект, если это необходимо. Я использую фильтр теней 0px, потому что он выделит прозрачную графику синим цветом для моего случая.
У меня есть фильтр на 0 с здесь, чтобы он не вступил в силу. Когда эффект отпущен, я могу добавить переход с задержкой, чтобы он обеспечивал хороший эффект «щелчка».
Это позволяет мне настроить его так, чтобы, когда пользователь нажимает кнопку, он подсвечивался синим цветом, а затем медленно исчезал (вы, конечно, могли бы использовать и другие эффекты).
Хотя вы ограничены в том смысле, что анимация для выделения является мгновенной, она все же обеспечивает желаемый эффект. Скорее всего, вы могли бы использовать этот трюк с анимацией для получения более плавного общего перехода.
источник
Хорошо, это может быть старый пост ... но был первый результат в Google и решил сделать свой собственный микс на этом как ..
В первую очередь, я буду использовать фокус
Причина в том, что это хорошо работает для примера, который я показываю, если кто-то хочет событие типа мыши, тогда используйте active
HTML-код:
КОД CSS:
JS FIDDLE LINK: http://jsfiddle.net/00wwkjux/
Итак, почему я публикую это в старой ветке, хорошо, потому что примеры здесь различаются, и я подумал предоставить один обратно сообществу, которое является рабочим примером.
Как уже ответил создатель потока, они хотят, чтобы эффект длился только во время события click. Теперь, хотя это не точно для этой необходимости, его закрыть. active будет анимироваться, пока мышь не нажимает, и любые изменения, которые вам нужны, должны длиться дольше с помощью javascript.
источник
Предупреждение! Особенно простой ответ ниже! :)
Вы действительно можете иметь изменения, которые сохраняются (например, блок / всплывающее окно, которое появляется и остается видимым после щелчка) только с CSS (и без использования хака с флажками), несмотря на то, что многие из (иначе правильных) ответов здесь утверждают, пока так как вам нужно только настойчивость во время наведения.
Так что взгляните на ответы Bojangles и TylerH, если они вам подходят, но если вы хотите получить простой и CSS-ответ, который оставит блок видимым после нажатия (и даже может заставить блок исчезнуть при последующем щелчке), затем увидеть это решение.
У меня была похожая ситуация, мне нужно было всплывающее окно div с onClick, где я не мог добавить JS или изменить разметку / HTML (действительно решение CSS), и это возможно с некоторыми предостережениями. Вы не можете использовать трюк: target, который может создать приятное всплывающее окно, если вы не можете изменить HTML (чтобы добавить 'id'), чтобы его не было.
В моем случае всплывающий элемент div содержался внутри другого элемента div, и я хотел, чтобы всплывающее окно отображалось поверх другого элемента div, и это можно сделать с помощью комбинации: active и: hover:
Пример (а также тот, который позволяет нажать на всплывающее окно, чтобы оно исчезло) по адресу:
http://davesource.com/Solutions/20150324.CSS-Only-Click-to-Popup-Div/
Я также вставил приведенный ниже пример фрагмента кода, но расположение в изолированной программной среде stackoverflow странное, поэтому мне пришлось поместить текст «click here» после innerDiv, который обычно не требуется.
источник
У меня есть код ниже для наведения мыши и щелчка мыши, и это работает:
и этот код скрывает изображение, когда вы нажимаете на него:
источник
У меня была проблема с элементом, который должен был быть КРАСНЫМ при наведении курсора и быть СИНИМ при нажатии при наведении курсора. Для достижения этого с помощью CSS вам нужно, например:
Некоторое время я боролся, пока не обнаружил, что проблема с порядком выбора CSS была моей проблемой. Проблема была в том, что я поменялся местами, а активный селектор не работал. Потом я узнал, что
:hover
идти первым, а потом:active
.источник
Вы можете использовать: цель
для общей цели
или фильтр по имени класса
или фильтр по имени
источник
:target
, уже опубликован, так что больше не нужно. Кроме того, спрашивающий спрашивает, как получить эффект «onclick», а не показать / скрыть другие элементы.