【问题标题】:element hover not working properly in css3 fade effects元素悬停在css3淡入淡出效果中无法正常工作
【发布时间】:2019-06-18 17:13:31
【问题描述】:

我正在做一个简单的项目,其中单个块元素悬停将显示 4 倍缩放元素。我通过纯 css 和 css3 过渡做到了。请参阅 jsfiddle 演示。将有四个元素,每个元素都有不同的悬停元素。但是当我将鼠标悬停在它上面时,只显示一个悬停元素,尽管它与该块或元素没有关联。

查看演示以发表意见。

.main {
  position: relative;
  width: 300px;
  overflow: hidden
}

.main a {
  width: 50%;
  height: 50%;
  float: left;
}

.main a .child {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  background: gray;
  filter: alpha(opacity=0);
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-out;
  -moz-transition: opacity 0.5s ease-out;
  -ms-transition: opacity 0.5s ease-out;
  -o-transition: opacity 0.5s ease-out;
  transition: opacity 0.5s ease-out;
}

.main a:hover .child {
  -webkit-transition: opacity 0.2s ease-in;
  -moz-transition: opacity 0.2s ease-in;
  -ms-transition: opacity 0.2s ease-in;
  -o-transition: opacity 0.2s ease-in;
  transition: opacity 0.2s ease-in;
  zoom: 1;
  filter: alpha(opacity=100);
  opacity: 1.0;
}
<div class="main">
  <a href="">
    <img src="http://placehold.it/150x150">
    <div class="child">
      <h4>1.Text</h4>
    </div>
  </a>
  <a href="">
    <img src="http://placehold.it/150x150">
    <div class="child">
      <h4>2.Text</h4>
    </div>
  </a>
  <a href="">
    <img src="http://placehold.it/150x150">
    <div class="child">
      <h4>3.Text</h4>
    </div>
  </a>
  <a href="">
    <img src="http://placehold.it/150x150">
    <div class="child">
      <h4>4.Text</h4>
    </div>
  </a>

</div>

Demo project on JSFiddle

重要提示:如果我在 css3 过渡状态下使用 display none 或 block in hover instate 那么它工作正常,但我需要淡入淡出效果。

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    这里的问题是当鼠标悬停在一个元素上时会显示四个 .child 元素,但只有最后一个 .child 是可见的,要解决这个问题,请使用 visibility 属性而不是 display:

    https://jsfiddle.net/f9m1mnce/

    .main{
    	position: relative;
    	width: 300px;
    	overflow:hidden	
    }
    .main a{
    	width: 50%;
    	height: 50%; 
    	float:left;
    }
    .main a > .child{
    	position: absolute; 
    	left:0;
    	right:0;
    	bottom:0;
    	top: 0;
        visibility: hidden;
    	background: gray;
    	filter: alpha(opacity=0);
    	opacity: 0;
    	-webkit-transition: opacity 0.5s ease-out;
    	-moz-transition: opacity 0.5s ease-out;
    	-ms-transition: opacity 0.5s ease-out;
    	-o-transition: opacity 0.5s ease-out;
    	transition: opacity 0.5s ease-out;					
    }
    .main a:hover > .child{
    	-webkit-transition: opacity 0.2s ease-in .2;
    	-moz-transition: opacity 0.2s ease-in .2 ;
    	-ms-transition: opacity 0.2s ease-in .2;
    	-o-transition: opacity 0.2s ease-in .2;
    	transition: opacity 0.2s ease-in .2; 
        top: 0;
        visibility: visible;
    	zoom: 1;
    	filter: alpha(opacity=100);
    	opacity: 1.0;
    }
    <div class="main">
    	<a href="">
    		<img src="http://placehold.it/150x150">
    		<div class="child">
    			<h4>1 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</h4>
    		</div>
    	</a>
    	<a href="">
    		<img src="http://placehold.it/150x150">
    		<div class="child">
    			<h4>2 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</h4>
    		</div>
    	</a>
    	<a href="">
    		<img src="http://placehold.it/150x150">
    		<div class="child">
    			<h4>3 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</h4>
    		</div>
    	</a>
    	<a href="">
    		<img src="http://placehold.it/150x150">
    		<div class="child">
    			<h4>4 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</h4>
    		</div>
    	</a>
    	
    </div>

    【讨论】:

      【解决方案2】:

      绝对元素与其父相对元素相关联,在您的演示中,您需要设置相对于标签

      的位置
      .main a{
          width: 50%;
          height: 50%; 
          float:left;
          position:relative;
      }
      

      【讨论】:

        【解决方案3】:

        您可以尝试使用 ::before

        HTML

        <ul id="content-ul">
            <li>
                <a href="#" target="_blank" titulo="Lorem 1">
                    <img src="http://placehold.it/150x150" />
                </a>
            </li>
            <li>
                <a href="#" target="_blank" titulo="Lorem 2">
                    <img src="http://placehold.it/150x150" />
                </a>
            </li>
            <li>
                <a href="#" target="_blank" titulo="Lorem 3">
                    <img src="http://placehold.it/150x150" />
                </a>
            </li>
            <li>
                <a href="#" target="_blank" titulo="Lorem 4">
                    <img src="http://placehold.it/150x150" />
                </a>
            </li>
        </ul>
        

        CSS:

        #content-ul{
            display: block;
            width: 340px;
            margin: auto;
            overflow: hidden;
        }
        #content-ul li,#content-ul li a{
            display: block;
            position: relative;
            width: 150px;
            height: 150px;
            float: left;
            overflow: hidden;
        }
        #content-ul li{
            margin: 10px 10px ;
        }
        #content-ul li a{
            text-decoration: none;
            color: #fff;
            font-size: 14px;
            text-shadow: 0 1px 0 #000;
            font-weight: bold;
            border-radius: 4px;
        }
        #content-ul li a img{
            border-radius: 4px;
        
        }
        #content-ul li a:before{
            visibility: hidden;
            content: attr(titulo);
            position: absolute;
            line-height: 250px;
            float: left;
            width: 150px;
            height: 150px;
            background: rgba(0,0,50,.5);
            border-radius: 4px;
            overflow: hidden;
            text-align: center;
            font-size: 25px;
        
            filter: alpha(opacity=0);
            opacity: 0;
            -webkit-transition: opacity 0.5s ease-out;
            -moz-transition: opacity 0.5s ease-out;
            -ms-transition: opacity 0.5s ease-out;
            -o-transition: opacity 0.5s ease-out;
            transition: opacity 0.5s ease-out;
        
        }
        #content-ul li a:hover::before{
            -webkit-transition: opacity 0.2s ease-in;
            -moz-transition: opacity 0.2s ease-in;
            -ms-transition: opacity 0.2s ease-in;
            -o-transition: opacity 0.2s ease-in;
            transition: opacity 0.2s ease-in; 
            zoom: 1;
            filter: alpha(opacity=100);
            opacity: 1.0;
            visibility: visible;
        }
        

        Working Demo


        这里是基于您的代码的更新:

        HTML:

         <div class="main">
            <a href="" content="1Lorem Ipsum is simply dummy text of the printing and typesetting industry.">
                <img src="http://placehold.it/150x150">
            </a>
            <a href="" content="2Lorem Ipsum is simply dummy text of the printing and typesetting industry.">
                <img src="http://placehold.it/150x150">
            </a>
            <a href="" content="3Lorem Ipsum is simply dummy text of the printing and typesetting industry.">
                <img src="http://placehold.it/150x150">
            </a>
            <a href="" content="4Lorem Ipsum is simply dummy text of the printing and typesetting industry.">
                <img src="http://placehold.it/150x150">
            </a>
        </div>
        

        CSS:

        .main{
            position: relative;
            width: 300px;
            overflow:hidden
        }
        .main a{
            width: 50%;
            height: 50%; 
            float:left;
        }       
        .main a:before{
            visibility: hidden;
            content: attr(content);
            position: absolute;
            line-height: 250px;
            float: left;
            width: 150px;
            height: 150px;
            background: rgba(0,0,50,.5);
            border-radius: 4px;
            overflow: hidden;
            text-align: center;
            font-size: 25px;
            filter: alpha(opacity=0);
            opacity: 0;
            -webkit-transition: opacity 0.5s ease-out;
            -moz-transition: opacity 0.5s ease-out;
            -ms-transition: opacity 0.5s ease-out;
            -o-transition: opacity 0.5s ease-out;
            transition: opacity 0.5s ease-out;
        }
        .main a:hover::before{
            -webkit-transition: opacity 0.2s ease-in;
            -moz-transition: opacity 0.2s ease-in;
            -ms-transition: opacity 0.2s ease-in;
            -o-transition: opacity 0.2s ease-in;
            transition: opacity 0.2s ease-in; 
            zoom: 1;
            filter: alpha(opacity=100);
            opacity: 1.0;
            visibility: visible;
        }
        

        Working Demo

        【讨论】:

        • 这只是一个建议。我将更新我的答案,并为他的代码提供一个可行的解决方案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 2011-03-05
        • 2015-09-02
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多