有没有办法只使用CSS3和HTML来创建图像滑块
但是没有使用任何HTML input
(广播)元素而没有使用JavaScript?
我有一个大规模的搜索会话,发现了接近worked well的内容,但是正在使用HTML无线电输入。
答案 0 :(得分:16)
(...由于您不允许使用input radio
元素来维持活动状态...)
还有另一种方法可以使用 :target
伪在纯 CSS(3)中制作滑动图库。
:target
成为被点击的锚点引用的id="foo"
元素,其中包含URI片段(哈希)href="#foo"
在CSS中,使用:target
伪,您可以使用~
(一般同级选择器)将树下引用到其他同级元素,而不是您可以照常进一步访问他们的子元素(幻灯片,按钮等)。
提示:如果您不喜欢图库的“功能”弄乱您的网址片段(浏览器返回按钮触发图库滑动而不是浏览历史记录!),您始终沙箱 - 将您的图库文件调入<iframe>
。
html, body{height:100%;}
body{font:15px/1 sans-serif; margin:0;}
/*
RESPONSIVE CSS3 SLIDE CAROUSEL GALLERY
http://stackoverflow.com/a/34696029/383904
*/
.CSSgal{
position: relative;
overflow: hidden;
height: 100%; /* Or set a fixed height */
}
/* SLIDER */
.CSSgal .slider{
height: 100%;
white-space: nowrap;
font-size: 0;
transition: 0.8s;
}
/* SLIDES */
.CSSgal .slider > *{
font-size: 1rem;
display: inline-block;
vertical-align: top;
height: 100%;
width: 100%;
background: none 50% no-repeat;
background-size: cover;
}
/* PREV/NEXT, CONTAINERS & ANCHORS */
.CSSgal .prevNext{
position: absolute;
z-index: 1;
top: 50%;
width: 100%;
height: 0;
}
.CSSgal .prevNext > div+div{
visibility: hidden; /* Hide all but first P/N container */
}
.CSSgal .prevNext a{
background: #fff;
position: absolute;
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
opacity: 0.7;
text-decoration: none;
-webkit-transform: translateY( -50% );
transform: translateY( -50% );
}
.CSSgal .prevNext a:hover{
opacity: 1;
}
.CSSgal .prevNext a+a{
right: 0px;
}
/* NAVIGATION */
.CSSgal .bullets{
position: absolute;
z-index: 2;
bottom: 0;
padding: 10px 0;
width: 100%;
text-align: center;
}
.CSSgal .bullets > a{
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
text-decoration: none;
text-align: center;
border-radius: 50%;
background: rgba(255,255,255,1);
}
.CSSgal .bullets > a+a{
background: rgba(255,255,255,0.5); /* Dim all but first */
}
.CSSgal .bullets > a:hover{
background: rgba(0,255,255,0.9);
}
/* ACTIVE NAVIGATION ANCHOR */
.CSSgal >s:target ~ .bullets >* { background: rgba(255,255,255,0.5); }
#s1:target ~ .bullets >*:nth-child(1){ background: rgba(255,255,255, 1); }
#s2:target ~ .bullets >*:nth-child(2){ background: rgba(255,255,255, 1); }
#s3:target ~ .bullets >*:nth-child(3){ background: rgba(255,255,255, 1); }
#s4:target ~ .bullets >*:nth-child(4){ background: rgba(255,255,255, 1); }
/* PREV/NEXT CONTAINERS VISIBILITY */
.CSSgal >s:target ~ .prevNext >* { visibility: hidden; }
#s1:target ~ .prevNext >*:nth-child(1){ visibility: visible; }
#s2:target ~ .prevNext >*:nth-child(2){ visibility: visible; }
#s3:target ~ .prevNext >*:nth-child(3){ visibility: visible; }
#s4:target ~ .prevNext >*:nth-child(4){ visibility: visible; }
/* SLIDER ANIMATION POSITIONS */
#s1:target ~ .slider{ transform: translateX( 0%); -webkit-transform: translateX( 0%); }
#s2:target ~ .slider{ transform: translateX(-100%); -webkit-transform: translateX(-100%); }
#s3:target ~ .slider{ transform: translateX(-200%); -webkit-transform: translateX(-200%); }
#s4:target ~ .slider{ transform: translateX(-300%); -webkit-transform: translateX(-300%); }
<div class="CSSgal">
<!-- Don't wrap targets in parent -->
<s id="s1"></s>
<s id="s2"></s>
<s id="s3"></s>
<s id="s4"></s>
<div class="slider">
<div style="background:#5fc;">Slide 1</div>
<div style="background-image:url('//i.imgur.com/squw4Fw.jpg');"></div>
<div style="background:#fc5;">Slide 3</div>
<div style="background:#f5c;">Slide 4</div>
</div>
<div class="prevNext">
<div><a href="#s4">4</a><a href="#s2">2</a></div>
<div><a href="#s1">1</a><a href="#s3">3</a></div>
<div><a href="#s2">2</a><a href="#s4">4</a></div>
<div><a href="#s3">3</a><a href="#s1">1</a></div>
</div>
<div class="bullets">
<a href="#s1">1</a>
<a href="#s2">2</a>
<a href="#s3">3</a>
<a href="#s4">4</a>
</div>
</div>