<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. A aut qui labore rerum placeat similique hic consequatur tempore doloribus aliquid alias, nobis voluptates. Perferendis, voluptate placeat esse soluta deleniti id!</p>
p {
width:200px;
height:200px;
resize: horizontal;
overflow: scroll;
}
本文将介绍一个非常有意思的功能,使用纯 CSS 利用 resize 实现强大的图片切换预览功能。类似于这样:
思路
首先,要实现这样一个效果如果不要求可以拖拽,其实有非常多的办法。
两种方式都简单示意一下。
假设我们的结构如下,分别使用
background展示两张图片:方法一,改变上层图片的宽度的方式:
效果如下:
当然,使用
mask遮罩的方式也非常轻松的可以实现类似的效果:也可以得到同样的效果:
上述 DEMO 的完整代码:CodePen Demo -- Switch Picture
使用 resize 实现拖拽功能
下一步则是最核心,最关键的一步,巧妙的使用 CSS
resize属性,实现拖拽控制元素的宽度。什么是
resize?resize:该属性允许你控制一个元素的大小语法如下:
{ /* Keyword values */ resize: none; resize: both; resize: horizontal; resize: vertical; resize: block; resize: inline; }看一个最简单的 DEMO:
这里,我们设置了一个长宽为
200px的<p>为横向可拖拽改变宽度。效果如下:简单总结一些小技巧:
resize的生效,需要配合overflow: scroll,当然,准确的说法是,overflow不是visible,或者可以直接作用于替换元素譬如图像、<video>及<iframe>、<textarea>等resize的horizontal、vertical、both来设置横向拖动、纵向拖动、横向纵向皆可拖动。max-width、min-width、max-height、min-height限制可拖拽改变的一个范围将 resize 运用于图片拖拽切换
OK,接下来,我们将 resize 运用于图片拖拽切换。
首先,还是上述的代码,我们将 resize 作用于子元素试试:
可以看到,
g-inner设置了resize: horizontal,将允许被横向拖动,实际的效果如下:嗯,非常接近了,因为需要配合
overflow: scroll,所以出现了恼人的滚动条,非常的不美观,我们得想办法干掉滚动条。借助多一层嵌套及绝对定位实现隐藏滚动条
隐藏滚动条的方式有很多,这里我们介绍其中一种巧妙的方式,我们对我们的结构进行一下改造,再叠加多一层 div:
我们将控制拖拽这个功能交给
g-resize,它负责改变元素的宽度,而g-inner改为绝对定位,当g-resize的宽度增大时,其父元素g-inner也会随之增大,最后设置g-resize的opacity为 0 即可隐藏滚动条。核心代码如下:
这里,为了方便示意,我将
opacity设置了一个渐隐渐现的动画效果,方便示意:借助伪元素,显示拖拽条
最后一步,由于完全隐藏了滚动条,用户也就不知道可以拖拽了,所以我们还需要绘制一个更为好看的拖拽条,这里延续上述的布局,给
.g-inner再添加一个伪元素,绝对定位在元素最后即可:最终完美达成效果:
完整详细的代码,你可以在我的 CSS 灵感上看到:
CSS 灵感 -- 利用 resize 实现图片切换预览功能
总结一下
通过本文,你可以学会:
最后
好了,本文到此结束,希望对你有帮助 :)
想 Get 到最有意思的 CSS 资讯,千万不要错过我的公众号 -- iCSS前端趣闻😄
更多精彩 CSS 效果可以关注我的 CSS 灵感
更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。
如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
The text was updated successfully, but these errors were encountered: