Ответ 1
Нет, вы не можете напрямую запускать JavaScript из CSS.
Что вы можете сделать, так это использовать селектор CSS, чтобы найти элементы, которые вы хотите смотреть таким образом, а затем наблюдать за событиями мыши. Стандартными событиями являются mouseover
и mouseout
, но они могут быть немного сложными для работы, потому что они пузырятся (вы получаете mouseout
, например, всякий раз, когда мышь оставляет какой-либо элемент-потомок). С соответствующей логикой, однако, они не плохо работают, и на самом деле, если у вас их много, вы, вероятно, захотите использовать mouseover
и mouseout
, а не альтернативу ниже, потому что вы можете установить их только родительский контейнер, а затем выработать элемент потомка, который может быть проще в некоторых случаях (и более сложный в других).
IE предоставляет mouseenter
и mouseleave
, с которыми гораздо проще работать, потому что они не пузырятся, но (конечно) IE-специфичны. Они настолько удобны, что фреймворки начинают поддерживать их даже в браузерах, которые этого не делают; Prototype и jQuery предоставляют их, например, и я не был бы слишком удивлен, если бы сделали некоторые другие рамки. jQuery также предоставляет удобную функцию hover
, которая будет очень близка к тому, что вы хотите:
// jQuery
$(".first-nav li a").hover(
function(event) {
// The mouse has entered the element, can reference the element via 'this'
},
function (event) {
// The mouse has left the element, can reference the element via 'this'
}
);
..., который на самом деле является просто ярлыком для настройки обработчиков mouseenter
и mouseleave
, но все же, прекрасно лаконичным.
В прототипе это очень похоже:
// Prototype
$$(".first-nav li a")
.invoke("observe", "mouseenter", function(event) {
// The mouse has entered the element, can reference the element via 'this'
})
.invoke("observe", "mouseleave", function(event) {
// The mouse has left the element, can reference the element via 'this'
});
(OT: В обоих случаях я использовал анонимные встроенные выражения функций, чтобы избежать создания впечатления, которое вы должны использовать именованными функциями. Однако я всегда рекомендую использовать именованные функции в производственном коде.)