【问题标题】:CSS only banner slider - Image hyperlink not working仅 CSS 横幅滑块 - 图像超链接不起作用
【发布时间】:2019-07-12 02:00:50
【问题描述】:

.zd-slider { position:relative; overflow:hidden; margin-top: 0px; }
.zd-slider img[id*="img"] {width:100%; position:absolute; left:0; top:0; opacity:0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}

/* set the width/height of the slideshow */
.zd-slider img#blank {display:block; width:100%; visibility:hidden;}

/* the slideshow */
.zd-slider #img_01 {-webkit-animation:autoplay 9s linear infinite 0s; animation:autoplay 9s linear infinite 0s;}
.zd-slider #img_02 {-webkit-animation:autoplay 9s linear infinite 3s; animation:autoplay 9s linear infinite 3s;}
.zd-slider #img_03 {-webkit-animation:autoplay 9s linear infinite 6s; animation:autoplay 9s linear infinite 6s; }


@-webkit-keyframes autoplay {
  4%,33% {opacity:1;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}
  0%,37%,100% {opacity:0;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}
}


@keyframes autoplay {
  4%,33% {opacity:1;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}
  0%,37%,100% {opacity:0;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}
}

/* the slide timing indicator */
.zd-slider #slide {width:98px; height:5px; position:absolute; left:0; bottom:0; background:rgba(255,255,255,0.5); 
-webkit-animation:slide 3s linear infinite; animation:slide linear 3s infinite;}

@keyframes slide {
  0% {left:-100px;}
  100% {left:100%;}
}
@-webkit-keyframes slide {
  0% {left:-100px;}
  100% {left:100%;}
}
<div class="zd-container" id="zd-collection2"> <div class="zd-slider">

  <img id="blank" src="http://via.placeholder.com/1440x133" alt="" /> 
  
  <img id="img_01" src="http://via.placeholder.com/1440x133" alt="" /> 
  
  <a href="http://www.google.com">
  <img id="img_02" src="http://via.placeholder.com/1440x133" alt="" /></a>
  
  <img id="img_03" src="http://via.placeholder.com/1440x133" alt="" /> <div id="slide"></div> </div> </div>

我正在使用这种幻灯片格式在 eBay 商品列表上显示横幅。我希望将幻灯片链接到商店中的各个页面,但是我尝试以传统方式添加超链接(请参阅“img_02”)并且绝对没有运气使幻灯片可点击。我在这里看到了类似的问题,并尝试了一些不同的“工作”解决方案,但没有任何运气。如果有人能就如何解决这个问题提出建议,将不胜感激。

【问题讨论】:

  • 如果您不需要支持旧的 IE,请使用 opacity 而不是 progid: 混乱

标签: html css css-animations keyframe


【解决方案1】:

似乎是一个 z-index 问题,而且因为您绝对定位您的图像,您的链接将没有高度。

在下面,我将您的图像包装在跨度中并定位它而不是图像(与锚具有相同的类,因此也可以定位)并向您的动画添加一些 z-index(代码中的 cmets)。

.zd-slider {
  position: relative;
  overflow: hidden;
  margin-top: 0px;
}

.zd-slider .container { /* move this from image to new container span / link */
  display: block;
  width: 100%;
  position: absolute;
  left: 0;
  top: 0;
  opacity: 0;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}

.zd-slider img {
  display: block;
  width: 100%;
}


/* set the width/height of the slideshow */

.zd-slider #blank {
  visibility: hidden;
  pointer-events: none; /* I added this in case it appeared on top of the absolute positioned elements - it shouldn't but just to be safe */
}


/* the slideshow */

.zd-slider #img_01 {
  -webkit-animation: autoplay 9s linear infinite 0s;
  animation: autoplay 9s linear infinite 0s;
}

.zd-slider #img_02 {
  -webkit-animation: autoplay 9s linear infinite 3s;
  animation: autoplay 9s linear infinite 3s;
}

.zd-slider #img_03 {
  -webkit-animation: autoplay 9s linear infinite 6s;
  animation: autoplay 9s linear infinite 6s;
}

@-webkit-keyframes autoplay {
  4%,
  33% {
    opacity: 1;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
    z-index: 2; /* add this to make sure visible item has a higher z-index that none visible items */
  }
  0%,
  37%,
  100% {
    opacity: 0;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
    z-index: 1; /* add this to make sure visible item has a higher z-index that none visible items */
  }
}

@keyframes autoplay {
  4%,
  33% {
    opacity: 1;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
    z-index: 2; /* add this to make sure visible item has a higher z-index that none visible items */
  }
  0%,
  37%,
  100% {
    opacity: 0;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
    ] z-index: 1; /* add this to make sure visible item has a higher z-index that none visible items */
  }
}


/* the slide timing indicator */

.zd-slider #slide {
  width: 98px;
  height: 5px;
  position: absolute;
  left: 0;
  bottom: 0;
  background: rgba(255, 255, 255, 0.5);
  -webkit-animation: slide 3s linear infinite;
  animation: slide linear 3s infinite;
  z-index: 3; /* make slider appear above images */
}

@keyframes slide {
  0% {
    left: -100px;
  }
  100% {
    left: 100%;
  }
}

@-webkit-keyframes slide {
  0% {
    left: -100px;
  }
  100% {
    left: 100%;
  }
}
<div class="zd-container" id="zd-collection2">
  <div class="zd-slider">

    <!-- sizing div doesn't need container class-->
    <span id="blank"><img src="http://via.placeholder.com/1440x133" alt="" /></span>


    <span class="container" id="img_01"><img src="http://via.placeholder.com/1440x133" alt="" /></span>
    <a href="http://www.google.com" class="container" id="img_02"><img src="http://via.placeholder.com/1440x135" alt="" /></a>
    <span class="container" id="img_03"><img src="http://via.placeholder.com/1440x133" alt="" /></span>
    <div id="slide"></div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    尝试添加以下 css 属性

    .zd-slider a { display: inline-block; }

    因为a标签没有得到任何宽度或高度,可能无法正确解释你,试试这个,肯定会工作。

    【讨论】:

      【解决方案3】:

      问题来自您的position: absolute

      它从正常流程中删除所有图像。所以&lt;a/&gt; 标签不会“包含”图像。

      您可以尝试使用静态位置和 transform: translate 动画而不是 opacity,这样就不需要堆叠图像。

      【讨论】:

        【解决方案4】:

        这行得通,需要将位置、宽度、高度和z-index都应用到链接上:

           #img_02_link{
             position: absolute; 
             top:0; left:0; 
             width: 100%; 
             height: 100%; 
             z-index:1;
          }
        
            .zd-slider { position:relative; overflow:hidden; margin-top: 0px; }
            .zd-slider img[id*="img"] {width:100%; position:absolute; left:0; top:0; opacity:0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}
        
            /* set the width/height of the slideshow */
            .zd-slider img#blank {display:block; width:100%; visibility:hidden;}
        
            /* the slideshow */
            .zd-slider #img_01 {-webkit-animation:autoplay 9s linear infinite 0s; animation:autoplay 9s linear infinite 0s;}
            .zd-slider #img_02 {-webkit-animation:autoplay 9s linear infinite 3s; animation:autoplay 9s linear infinite 3s;}
            .zd-slider #img_03 {-webkit-animation:autoplay 9s linear infinite 6s; animation:autoplay 9s linear infinite 6s; }
        
        
            @-webkit-keyframes autoplay {
              4%,33% {opacity:1;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}
              0%,37%,100% {opacity:0;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}
            }
        
        
            @keyframes autoplay {
              4%,33% {opacity:1;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}
              0%,37%,100% {opacity:0;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";}
            }
        
            /* the slide timing indicator */
            .zd-slider #slide {width:98px; height:5px; position:absolute; left:0; bottom:0; background:rgba(255,255,255,0.5); 
            -webkit-animation:slide 3s linear infinite; animation:slide linear 3s infinite;}
        
            @keyframes slide {
              0% {left:-100px;}
              100% {left:100%;}
            }
            @-webkit-keyframes slide {
              0% {left:-100px;}
              100% {left:100%;}
            }
        		<div class="zd-container" id="zd-collection2"> <div class="zd-slider">
        
        			<img id="blank" src="http://via.placeholder.com/1440x133" alt="" /> 
        			
        			<img id="img_01" src="http://via.placeholder.com/1440x133" alt="" /> 
        			
        			<a id="img_02_link" href="http://www.google.com" target="_blank">
        				<img id="img_02" src="http://via.placeholder.com/1440x133" alt="" />
        			</a>
        			
        			<img id="img_03" src="http://via.placeholder.com/1440x133" alt="" /> 
        
        			<div id="slide"></div> 
        		</div> 
        	</div>

        【讨论】:

          【解决方案5】:

          为每个滑块图像创建一个单独的 div,并将 Z-index 赋予该公共类 div....

          【讨论】:

            【解决方案6】:

            试试这个解决方案:

            演示:https://jsfiddle.net/yc07b60j/

            .zd-slider {
              position: relative;
              overflow: hidden;
              margin-top: 0px;
            }
            
            .zd-slider a {
              display: block;
              position: absolute;
              top: 0;
              left: 0;
              right: 0;
              bottom: 0;
            }
            
            .zd-slider img[id*="img"] {
              width: 100%;
              position: absolute;
              left: 0;
              top: 0;
              opacity: 0;
              -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
            }
            
            
            /* set the width/height of the slideshow */
            
            .zd-slider img#blank {
              display: block;
              width: 100%;
              visibility: hidden;
            }
            
            
            /* the slideshow */
            
            .zd-slider #img_01 {
              -webkit-animation: autoplay 9s linear infinite 0s;
              animation: autoplay 9s linear infinite 0s;
            }
            
            .zd-slider #img_02 {
              -webkit-animation: autoplay 9s linear infinite 3s;
              animation: autoplay 9s linear infinite 3s;
            }
            
            .zd-slider #img_03 {
              -webkit-animation: autoplay 9s linear infinite 6s;
              animation: autoplay 9s linear infinite 6s;
            }
            
            @-webkit-keyframes autoplay {
              4%,
              33% {
                z-index: 2;
                opacity: 1;
                -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
              }
              0%,
              37%,
              100% {
                z-index: 1;
                opacity: 0;
                -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
              }
            }
            
            @keyframes autoplay {
              4%,
              33% {
                z-index: 2;
                opacity: 1;
                -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
              }
              0%,
              37%,
              100% {
                z-index: 1;
                opacity: 0;
                -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
              }
            }
            
            
            /* the slide timing indicator */
            
            .zd-slider #slide {
              width: 98px;
              height: 5px;
              position: absolute;
              left: 0;
              bottom: 0;
              background: rgba(255, 255, 255, 0.5);
              -webkit-animation: slide 3s linear infinite;
              animation: slide linear 3s infinite;
            }
            
            @keyframes slide {
              0% {
                left: -100px;
              }
              100% {
                left: 100%;
              }
            }
            
            @-webkit-keyframes slide {
              0% {
                left: -100px;
              }
              100% {
                left: 100%;
              }
            }
            <div class="zd-container" id="zd-collection2">
              <div class="zd-slider">
            
                <img id="blank" src="http://via.placeholder.com/1440x133/f44242/ffffff" alt="" />
            
                <img id="img_01" src="http://via.placeholder.com/1440x133/86f441/ffffff" alt="" />
            
                <a href="http://www.google.com">
                  <img id="img_02" src="http://via.placeholder.com/1440x133/f44242/ffffff" alt="" />
                </a>
            
                <img id="img_03" src="http://via.placeholder.com/1440x133/41aff4/ffffff" alt="" />
                
              </div>
            </div>

            【讨论】:

              猜你喜欢
              • 2021-01-26
              • 1970-01-01
              • 2011-07-04
              • 1970-01-01
              • 2016-11-14
              • 1970-01-01
              • 1970-01-01
              • 2015-07-13
              • 1970-01-01
              相关资源
              最近更新 更多