图片画廊插件在网上数之不尽,大多数是使用js或jQuery来完成的。如何使用更少的代码来制作一个效果炫酷的图片画廊效果是我们这批文章的研究目的。HTML5提供了许多新的属性,利用这些实现和CSS3的动画功能,我们就可以轻松的制作出许多意想不到的效果。在这个案例中,我们使用了一些CSS hack技术和5个HTML5特性:
input
元素可以出现在页面的任何位置,而不必关联一个form
元素。- 正确的设置
label
元素的属性值可以将它用来替代单选按钮。 - 只要标签是有效的,一个
radio
按钮不必可见就可以使用它。 label
元素可以使用图片来作为内容。- CSS可以通过
:checked
伪元素来监控单选按钮的状态。
HTML结构
缩略图
要实现这项技术,HTML结构必须是正确有效的。其中,缩略图的HTML结构如下:
<label for=vallbona><img src="img/1-thumb.jpg" alt="" ></label> <input type="radio" id="vallbona" name="churchy"> <label for="woodward"><img src="img/2-thumb.jpg" alt=""></label> <input type="radio" id="woodward" name="churchy"> <label for="woodward2"><img src="img/3-thumb.jpg" alt=""></label> <input type="radio" id="woodward2" name="churchy">
为了简单,所有的缩略图都使用相同的尺寸。上面的代码需要注意以下几点:
label
元素中的for
属性必须和radio
元素的id
相关联。- 每一个
id
必须是唯一的。 - 所有的
radio
元素的name
属性必须相同,这样才能进行相互切换。
原图
大图的HTML代码页同样十分简单:
<div id="churches"> <img src="vallbona-de-les-monges.jpg" id="monges" alt> <img src="woodward-avenue-presbyterian.jpg" id="presby" alt> <img src="woodward-avenue-presbyterian2.jpg" id="presby2" alt> </div>
上面的代码中唯一的要求是每一个图片都带有一个id
。
CSS样式
基本CSS样式如下(注意代码中没有使用浏览器厂商的前缀):
input[type=radio] { display: none; } label img { width: 15%; display: block; float: left; clear: left; border-right: 40px solid #111; } label:hover { cursor: pointer; } div#churches { width: 70%; position: relative; } div#churches img { position: absolute; max-width: 100%; opacity: 0; transform: scale(0.8); transition: .5s all linear; }
上面的代码中声明隐藏radio
元素,并将图片制作为响应式布局。缩略图被放置到容器的左边。通过border-right
属性使图片和缩略图之间有一些间隙。大图开始时是不可见的,并且它们的宽度为原图的80%。
现在要添加用户互动功能:
#vallbona:checked ~ #churches img#monges { opacity: 1; transform: scale(1); } #woodward:checked ~ #churches img#presby { opacity: 1; transform: scale(1); } #woodward2:checked ~ #churches img#presby2 { opacity: 1; transform: scale(1); }
上面代码的选择器稍微有些复杂,仔细体会。翻译为中文就是:如果用户选择了指定id
的radio
按钮(不管是点击了radio
按钮还是和它关联的label
),那么选择它里面的id为churches
的兄弟元素。如果元素包含有指定ID的图片,设置最终元素的opacity: 1
,并设置scale
为正常样式。
你也可以用一个组声明来完成上面的语句:
#vallbona:checked ~ #churches img#monges, #woodward:checked ~ #churches img#presby, #woodward2:checked ~ #churches img#presby2 { opacity: 1; transform: scale(1); }
现在,在初始化时是不会显示任何一幅大图的,我们可以通过设置其中某个radio
按钮为checked
来显示这幅图片。
<input type="radio" id="woodward" name="churchy" checked>
到这里,这个图片画廊效果就做好了,希望这个效果能对你有所帮助。
相关图片画廊推荐: