html鼠标移上去变色放大,CSS3 鼠标滑过图片突出放大效果 | 腾讯云

这篇博客介绍了如何使用CSS3实现鼠标悬停图片时图片放大并保持长宽比,同时其他图片平滑地向外移动,避免重叠。通过设置transform属性的动画,实现了高性能的悬停效果。文章详细讲解了HTML结构和关键CSS代码,包括使用flex布局、transform动画以及通用兄弟组合器来实现预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天给大家分享一款简单实用的CSS3鼠标滑过图片放大特效,我们可以将它应用在相册中,或者是轮播展示的图片中,这样可以将鼠标移到图片上进行快速预览图片。同时你也可以在此基础上扩展它,比如给图片加投影和边框等。整一个图片放大特效还是比较酷的。

这里我们只用纯CSS实现!没错,没有一句JavaScript语句。也没有依赖关系。就是普通CSS。但在写代码之前,我们要做的就是:

悬停在上面的卡应该在保持长宽比的同时展开。

当一张牌悬停时,其他牌不应改变大小并向外移动,以免彼此重叠。

所有的牌应该保持垂直居中。

听起来不错吧?现在让我们开始带大家一步步写代码。

一、HTML和flexible元素

让我们先设置一行预览的图像。其中包括:

包含多个.item元素的.container父元素容器

每个.item元素都包含一个包装在锚标记中的图像

将.container转换为一个flex容器,该容器将行中的项对齐

设置.item类的flex行为,使它们在行中占用相等的空间

HTML代码如下:

CSS3 鼠标滑过图片突出放大效果

CSS3 鼠标滑过图片突出放大效果

CSS3 鼠标滑过图片突出放大效果

CSS3 鼠标滑过图片突出放大效果

CSS3 鼠标滑过图片突出放大效果

CSS代码如下:

.container {

display: flex;

margin-top: 50px;

}

.item {

position: relative;

display: block;

flex: 1 1 0px;

}

.item img {

display: block;

max-width: 100%;

}

效果如下:

45086ef1099003f2f764e064bd7ae654.gif

二、悬停时展开项目

我们的下一步是让项目在悬停时展开。我们可以通过设置元素宽度的动画来实现这一点,但这会影响文档的流动,并导致悬停项的同级项收缩–另外,设置宽度属性的动画在某些情况下会降低性能。

为了避免挤压悬停项的同级,我们将设置transform属性的动画(特别是它的scale()函数)。这不会像width那样影响文档流。关于transform属性的用法请看我之前写的一篇文章《css3 Transform属性如何在项目中使用?》

CSS代码如下:

.container {

display: flex;

margin-top: 50px;

}

.item {

position: relative;

display: block;

flex: 1 1 0px;

transition: transform 500ms;

}

.container .item:focus,

.container .item:hover {

transform: scale(1.5);

z-index: 1;

}

body {

overflow: hidden;

}

.item img {

display: block;

max-width: 100%;

}

GIF效果如下:

45086ef1099003f2f764e064bd7ae654.gif

三、向外移动兄弟元素

让悬停项的兄弟项远离悬停项是整个过程中很棘手的部分。我们可以使用的一个CSS特性是一般的兄弟组合器。这使我们可以选择位于悬停项之后的所有同级项。

我们将转到transform属性的translateX()函数来移动对象。同样,对转换设置动画比影响文档流的其他属性(如边距和填充)要好得多。

因为我们设置了一个项目在悬停时可以放大150%,所以转换应该设置为25%。这是悬停项所占用的额外空间的一半。

.item:hover ~ .item {

transform: translateX(25%);

}

这样可以将事物向右移动,但是我们如何转换左边的项目呢?由于通用的同级组合器仅适用于位于给定选择器之后的同级(没有“向后”),因此我们需要另一种方法。

一种方法是在父容器本身上添加其他悬停规则。这是计划:

悬停父容器时,请将该容器内的所有项目向左移动。

使用通用的同级组合器可以将悬停的项目向右移动后放置的项目。

获得超级特定的信息,因此悬停的项目不会像其他项目一样进行转变。

我们假设您的文档使用从左到右的书写模式。如果要在从右到左的上下文中使用此效果,则需要将悬停的外部容器内的所有项目设置为向右移动,并使用常规的同级组合器将所有选定的项目向左移动。

代码如下:

.container {

display: flex;

margin-top: 50px;

}

.item {

position: relative;

display: block;

flex: 1 1 0px;

transition: transform 500ms;

}

.container:focus-within .item,

.container:hover .item {

transform: translateX(-25%);

}

.item:focus ~ .item,

.item:hover ~ .item {

transform: translateX(25%);

}

.container .item:focus,

.container .item:hover {

transform: scale(1.5);

z-index: 1;

}

body {

overflow: hidden;

}

.item img {

display: block;

max-width: 100%;

}

最终GIF效果如下:

45086ef1099003f2f764e064bd7ae654.gif

此时悬停效果看起来更加圆滑,不再那么生硬。需要注意的一点是:此最终版本正在使用:focus和:focus-within伪类来支持键盘导航。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值