使用 CSS3 悬停时的背景图像不透明度过渡

Posted

技术标签:

【中文标题】使用 CSS3 悬停时的背景图像不透明度过渡【英文标题】:background-image opacity transition on hover with CSS3 【发布时间】:2012-05-28 01:16:01 【问题描述】:

当用户将光标放在链接上时,我正在尝试使用背景图像不透明度(从 0 到 100%)过渡。 我有这样的:

<div class="menu">
 <ul class="sf-menu">
  <li class="page_item page-item-2">
    <a href="http://filip-hostel.pl/?page_id=2">o nas</a></li>
  <li class="page_item page-item-6">
    <a href="http://filip-hostel.pl/?page_id=6">oferta</a></li>
  <li class="page_item page-item-8">
    <a href="http://filip-hostel.pl/?page_id=8">galeria</a></li>
  <li class="page_item page-item-10 current_page_item">
   <a href="http://filip-hostel.pl/?page_id=10">cennik</a></li>
  <li class="page_item page-item-12">
   <a href="http://filip-hostel.pl/?page_id=12">kontakt</a></li>
 </ul>
</div>

还有 CSS:

    .sf-menu a, .sf-menu a:visited
border:none;
color:#ffffff;
font-family:Arial;
font-size:16px;
line-height:72px;
width:65px;
text-align:center;
padding:0px;
margin:0;
background:none;
-webkit-transition: 1.0s ease-in;
    -moz-transition: .01s ease-in;
    -o-transition: 1.0s ease-in;
    -ms-transition: 1.0s ease-in;
    transition: 1.0s ease-in;



.sf-menu li:hover
background:none;


.sf-menu a:hover
background: url(img/menu_hover.png) center center no-repeat;



.current_page_item a
background: url(img/current_page.png) center center no-repeat;

它适用于 current_page_item 但不适用于其他人。 你可以看看它看起来如何HERE 有人知道吗? 提前致谢!

【问题讨论】:

【参考方案1】:

通常 CSS3 的过渡动画仅适用于现有的 CSS 属性,例如 background-image 和 background-position。没有背景不透明度字段可以满足您的需求。当属性发生变化时会发生转换。

通过更改背景图像暗示您想要的过渡(某些浏览器不会将其显示为淡入淡出过渡,如早期版本的 firefox),在这种情况下,.current_page_item a 的两种不同状态将是background-image: url(img/current_page.png);background-image: url(img/menu_hover.png);,其他属性相同,如background-position。但是对于.sf-menu a,这两种状态是完全不同的,从background-iamge: none; background-position: left top;background-image: url(img/menu_hover.png); background-position: center center;没有办法在不存在的图像和新的图像之间显示动画,所以没有淡入淡出的过渡.

如果您真的想要这个动画,请尝试使用包含您的As 的剪辑框(LI 可以),并给A 一个半径边框和一个background-color

【讨论】:

有没有办法过渡 rgba 不透明度? @WillHancock 您可以进行 rgba 过渡,它的工作方式与 rgb 颜色相同。【参考方案2】:

我会使用继承background-image:before 元素。

类似的东西。

a 
  background: black url('http://umea.ee/thumb.jpg') 0 0 no-repeat;
  background-size: 0 0;
  color: white;
  display: inline-block;
  padding: 1em;
  position: relative;
  z-index: 1;

a:before 
  background-image: inherit;
  background-position: 50% 50%;
  background-repeat: no-repeat;
  background-size: cover;
  content: '';
  height: 100%;
  left: 0px;
  opacity: 0.5;
  position: absolute;
  top: 0px;
  width: 100%;
  z-index: -1;
  -webkit-transition: opacity 300ms;
  transition: opacity 300ms;

a:hover:before 
  opacity: 1;
&lt;a href="#"&gt;I am link&lt;/a&gt;

更新 - 如果您想为相同的背景图像设置动画,则如下所示:

a 
  background: black url('http://umea.ee/thumb.jpg') top left no-repeat;
  background-size: 100% 200%;
  color: white;
  display: inline-block;
  padding: 1em;
  position: relative;
  z-index: 1;

a:before 
  background: inherit;  
  background-size: inhertit;
  background-position: bottom right;
  content: '';
  height: 100%;
  left: 0px;
  opacity: 0;
  position: absolute;
  top: 0px;
  width: 100%;
  z-index: -1;
  opacity: 0;
  -webkit-transition: opacity 300ms;
  transition: opacity 300ms;

a:hover:before 
  opacity: 1;
&lt;a href="#"&gt;I am link&lt;/a&gt;

【讨论】:

以上是关于使用 CSS3 悬停时的背景图像不透明度过渡的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS3 更改具有不透明度过渡的图像以响应 onClick 事件?

css 过渡不透明度淡入淡出背景

悬停时的不透明度变化会导致图像偏移或失真

悬停动画淡入不透明度 0.5 悬停不透明度 1

在任何背景上突出显示图像(悬停时)

css3透明度与过度属性