Відповідь станом на 2019 рік:
Найкращий спосіб (насправді єдиний спосіб *) для імітації фактичної події натискання, використовуючи лише CSS (а не просто навішування елемента або активування елементу, де у вас немає mouseUp ) - використовувати хак-хак. Він працює заклеювання label
до <input type="checkbox">
елементу з допомогою лейбла for=""
атрибута.
Ця функція має широку підтримку браузера ( :checked
псевдоклас - IE9 +).
Застосувати таке ж значення , до <input>
«s атрибут ID і супроводжуючим <label>
» s for=""
атрибута, і ви можете сказати браузеру , щоб повторно стилі етикетки одним помахом з :checked
псевдо-класу, завдяки тому , що при натисканні на мітку буде перевіряти і зніміть "пов'язаний"<input type="checkbox">
.
* Ви можете імітувати «обраний» подія через :active
або :focus
псевдо-класу в IE7 + (наприклад , для кнопки , яке зазвичай 50px
широко, ви можете змінити його ширину той час як active
: #btnControl:active { width: 75px; }
), але це не так "натисніть кнопку" події. Вони "живуть" протягом усього часу вибору елемента (наприклад, за допомогою Tabbing за допомогою клавіатури), що трохи відрізняється від події справжнього натискання, яка запускає дію на - як правило - mouseUp
.
Основна демонстраційна версія хак-боксу (основна структура коду для того, що ви запитуєте):
label {
display: block;
background: lightgrey;
width: 100px;
height: 100px;
}
#demo:checked + label {
background: blue;
color: white;
}
<input type="checkbox" id="demo"/>
<label for="demo">I'm a square. Click me.</label>
Тут я розмістив мітку відразу після введення моєї розмітки. Це так, що я можу використовувати сусідній селектор вибору братів ( +ключ), щоб вибрати лише мітку, яка одразу слідує за моєю #demo
прапорцем. Оскільки :checked
псевдоклас поширюється на прапорець, #demo:checked + label
він застосовуватиметься лише тоді, коли прапорець встановлений.
Демонстрація повторного розміру зображення при натисканні. Це запитання:
#btnControl {
display: none;
}
#btnControl:checked + label > img {
width: 70px;
height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl"><img src="http://placekitten.com/200/140" id="btnLeft" /></label>
З урахуванням сказаного, є деякі погані новини. Оскільки мітка може бути пов’язана лише з одним елементом керування формою одночасно , це означає, що ви не можете просто впустити кнопку всередині <label></label>
тегів і викликати її за день. Однак ми можемо використовувати деякі CSS для того, щоб ярлик виглядав і поводився досить близько до того, як виглядає та поводиться кнопка HTML.
Демонстрація імітації ефекту натискання кнопки вище та поза тим, що ви запитуєте:
#btnControl {
display: none;
}
.btn {
width: 60px;
height: 20px;
background: silver;
border-radius: 5px;
padding: 1px 3px;
box-shadow: 1px 1px 1px #000;
display: block;
text-align: center;
background-image: linear-gradient(to bottom, #f4f5f5, #dfdddd);
font-family: arial;
font-size: 12px;
line-height:20px;
}
.btn:hover {
background-image: linear-gradient(to bottom, #c3e3fa, #a5defb);
}
.btn:active {
margin-left: 1px 1px 0;
box-shadow: -1px -1px 1px #000;
outline: 1px solid black;
-moz-outline-radius: 5px;
background-image: linear-gradient(to top, #f4f5f5, #dfdddd);
}
#btnControl:checked + label {
width: 70px;
height: 74px;
line-height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl">Click me!</label>
Більшість CSS у цій демонстрації призначена лише для стилізації елемента мітки. Якщо вам насправді не потрібна кнопка , і будь-який старий елемент буде достатнім, ви можете видалити майже всі стилі з цієї демонстрації, подібно до моєї другої демонстрації, наведеної вище.
Ви також помітите , у мене є один префиксально власність в там, -moz-outline-radius
. Нещодавно Mozilla додала цю дивовижну неспецифічну властивість Firefox, але люди в WebKit вирішили, що , на жаль , не збираються її додавати . Тож вважайте, що ця лінія CSS є лише прогресивним вдосконаленням для людей, які використовують Firefox.
:active
працює, поки миша не працює. Залежно від того, що ви намагаєтеся зробити, ви, можливо, зможете змусити його працювати, використовуючи псевдоклас CSS4:target
.