Javascript css“onmouseover”事件如何工作?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5952890/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how does the css "onmouseover" event work?
提问by arun nair
update- sorry folks, i should have provided the link to the website where i saw the effect. here you go - http://www.w3schools.com/Css/css_image_transparency.asp
更新 - 抱歉各位,我应该提供我看到效果的网站的链接。给你 - http://www.w3schools.com/Css/css_image_transparency.asp
and the code that i saw there (and the basis of this question) is as below -
我在那里看到的代码(以及这个问题的基础)如下 -
<img src="klematis.jpg" style="opacity:0.4;filter:alpha(opacity=40)"
onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"
onmouseout="this.style.opacity=0.4;this.filters.alpha.opacity=40" />
The original question is as below -
原来的问题如下 -
I was looking for rollover effects that can be done without using JS, and i stumbled upon the w3schools website teaching the opacity setting for images. In the code, there is no js involved, its just pure css.
我一直在寻找无需使用 JS 即可完成的翻转效果,我偶然发现了 w3schools 网站,该网站教授图像的不透明度设置。在代码中,没有涉及js,它只是纯css。
i even tried using the same code into my webpage (which does not have any js, yet) and i noticed that the code happened to work perfectly in both chrome and IE 7.0. the code has a "onmouseover" event and another "onmouseout" event to give the hover effects based on the opacity settings.
我什至尝试在我的网页中使用相同的代码(还没有任何 js),我注意到代码恰好在 chrome 和 IE 7.0 中都能完美运行。该代码有一个“onmouseover”事件和另一个“onmouseout”事件,用于根据不透明度设置提供悬停效果。
wondering whether these effects (onmouseover and onmouseout) are - 1. pure css 2. standards compliant (xhtml 1+ and css2) 3. whether there are any hacks involved
想知道这些效果(onmouseover 和 onmouseout)是否 - 1. 纯 css 2. 符合标准(xhtml 1+ 和 css2) 3. 是否涉及任何黑客攻击
i still cant believe these things worked on ie7, and wondering why there are no documentation on these events.
我仍然无法相信这些东西在 ie7 上有效,并想知道为什么没有关于这些事件的文档。
回答by Rich Adams
There's no such "onmouseover" event or attribute in CSS, that's JavaScript. CSS uses the ":hover" pseudo-class for mouse over events. A quick example,
CSS 中没有这样的“onmouseover”事件或属性,那就是 JavaScript。CSS 使用 ":hover" 伪类来处理鼠标悬停事件。一个简单的例子,
HTML:
HTML:
<div id="someid">I'm a random div.</div>
CSS:
CSS:
#someid {
background: #fff;
}
#someid:hover {
background: #000;
}
In this example, when you hover over the #someid
element, it's background will change from white to black.
在此示例中,当您将鼠标悬停在#someid
元素上时,其背景将从白色变为黑色。
This is the correct way to handle mouse over events in CSS. It is standards compliantand will work in all modern browsers (and some older browsers too).
这是在 CSS 中处理鼠标悬停事件的正确方法。它符合标准,适用于所有现代浏览器(以及一些较旧的浏览器)。
Sidenote: It won't always work in IE6, IE6 only recognizes the ":hover" pseudo-class when it's applied to anchor tags ("a:hover", etc).
旁注:它并不总是在 IE6 中工作,IE6 仅在应用于锚标记(“a:hover”等)时识别“:hover”伪类。
Based on the update to your question:
根据对您问题的更新:
<img src="klematis.jpg" style="opacity:0.4;filter:alpha(opacity=40)"
onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100"
onmouseout="this.style.opacity=0.4;this.filters.alpha.opacity=40" />
That is using JavaScript to change the style. The only bit of this which is CSS is the style='...'
part. The text in onmouseover
and onmouseout
is JavaScript.
那就是使用 JavaScript 来改变样式。唯一的一点是 CSS 是style='...'
部分。在文本onmouseover
和onmouseout
是JavaScript的。
To do what you want in pure CSS, it should be like this,
在纯 CSS 中做你想做的事情,应该是这样的,
<html>
<head>
<style>
img.opacity-image {
opacity: 0.4;
filter:alpha(opacity=40); /* This is IE specific and NOT standards complaint */
}
img.opacity-image:hover {
opacity: 1;
filter:alpha(opacity=100); /* Again, 'filter:' is IE specific. */
}
</style>
</head>
<body>
...
<img src="klematis.jpg" class="opacity-image" />
....
</body>
</html>
opacity
is CSS3 and only supported by modern browsers(IE6,7,8 don't support it). You can use filter:...
to get opacity to work in IE (although it won't handle PNGs correctly, but since you're using JPG that's not an issue), but then your code isn't technically standards compliant as "filter
" is not in the CSS standard. That doesn't generally matter too much though since it'll still render correctly in any modern browser.
opacity
是 CSS3,只有现代浏览器支持(IE6、7、8 不支持)。您可以使用filter:...
使不透明度在 IE 中工作(虽然它不能正确处理 PNG,但由于您使用的是 JPG,这不是问题),但是您的代码在技术上不符合标准,因为“ filter
”不在CSS 标准。这通常并不重要,因为它仍然可以在任何现代浏览器中正确呈现。
回答by Atticus
I'm assuming you're talking about the :hover event?
我假设你在谈论 :hover 事件?
<div id="hoverDiv"> Something should happen when you hover on me</div>
Style:
风格:
#hoverDiv:hover{ background-color:red; }
Visual example: http://jsfiddle.net/zRnug/
可视化示例:http: //jsfiddle.net/zRnug/
All hover effects you want to add to your stylesheet within the #selector:hover
{ } area.
您要添加到#selector :hover
{ } 区域内的样式表的所有悬停效果。
All effects you want to pertain before (the default style of the element), just use within the #selector{ } area.
您之前想要使用的所有效果(元素的默认样式),只需在 #selector{} 区域内使用即可。
回答by Spudley
CSS supports the :hover
selector, which is triggered when you move the mouse over the item.
CSS 支持:hover
选择器,当您将鼠标移到项目上时会触发选择器。
.mydiv {background-color:red;}
.mydiv:hover {background-color:blue;}
Any CSS property can be set to change on mouse-over using the :hover
selector in this way.
可以通过:hover
这种方式使用选择器将任何 CSS 属性设置为在鼠标悬停时更改。
Opacity is a CSS3 feature. It is supported by most browsers, but IE8 and lower don't support it. They do have an alternative way of doing it (using the IE-specific filter
property); it's more fiddly than standard CSS and harder to get right, but it can be done.
不透明度是一个 CSS3 特性。大多数浏览器都支持,但IE8及更低版本不支持。他们确实有一种替代方法(使用特定于 IE 的filter
属性);它比标准 CSS 更繁琐,更难做到正确,但可以做到。
Be aware that IE6 and lower only supports :hover
on <a>
elements. Other browsers (including IE7 and up) support it for all elements. My advice would be just not to support IE6 on your site, but if you do need to, there are hacks for it which can make :hover
work correctly.
要知道,IE6和降低只支持:hover
对<a>
元素。其他浏览器(包括 IE7 及更高版本)支持所有元素。我的建议是不要在您的网站上支持 IE6,但如果您确实需要,有一些技巧可以使其:hover
正常工作。
回答by SLaks
Those are Javascript inline event handlers.
这些是 Javascript 内联事件处理程序。
You can do this in pure CSS using the :hover
selector.
您可以使用:hover
选择器在纯 CSS 中执行此操作。