hover效果加边框不抖动

博客讲述了在实现hover效果为div添加边框时遇到的文字抖动和边框覆盖问题。通过调整元素的margin和height,以及使用负margin来遮挡分割线,最终解决了问题。同时提到了margin-top在某些情况下的失效问题及其解决方案。

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

前两天遇到一个hover效果给整个div加边框的问题。
这里写图片描述

html 如下

 <div class="hot-recommend">
        <div class="wrapper">
            <div class="offer-list">
                <ul class='underline'>
                    <li class="offer-list-item  fd-clr">
                        <!-- <h3 class="title">今日热推</h3> -->
                        <div class="offer-feature">
                            <dl class="fea1">
                                <dt><a href="">外形小巧<i class="dot"></i></a></dt>
                                <dd><a href="">轻盈有触感,数字清晰</a></dd>
                            </dl>
                            <dl class="fea3">
                                <dt><a href="">超大屏幕<i class="dot"></i></a></dt>
                                <dd><a href="">不锈钢笔尖圆润耐磨书写360°顺滑流畅</a></dd>
                            </dl>
                        </div>
                        <div class="offer-pic">
                            <a href="#" title="#" target=""><img src='http://wd.alibaba-inc.com/i/260-260.png' alt=''/></a></a>
                            <i class='sold-out'></i>
                            <p class="text">已抢完<span>sold out</span></a></p>
                        </div>
                        <div class="offer-feature">
                            <dl class="fea2 ">
                                <dt><i class="dot "></i>大按键</a></dt>
                                <dd>墨水仓可视窗口方便观察墨量</a></dd>
                            </dl><dl class="fea4">
                                <dt><i class="dot"></i>双电源</a></dt>
                                <dd>直液式控墨系统出墨匀保证用完最后一滴</a></dd>
                            </dl>
                        </div>
                        <div class="offer-detail">
                            <dl class="offer-introduce">
                                <dt class='offer-title'><span>deli/得力 837ES 经济型太阳能双电源计算器</span><i ></i></dt>
                                <dd class='offer-slogan'>7月7日雨,白雪直液式中性笔今日首发。9.8一盒含泪卖,比圆珠笔更低的价格,走珠笔的顺滑手感,你值得拥有!和圆珠笔说拜拜~</dd>
                            </dl>
                            <p class="timeout"><i class='timeout-icon'></i><span>限时特惠 <span class="month"></span><span class="day"></span><span class="hour"></span>小时<span class="minute"></span>分钟<span class="second"></span></span></p>
                            <p class="offer-price">
                                <span class="price-cur"><i class="fd-cny">&yen;</i><span class="split"><em>555.99</em></span><i class="unit">/个</i></span>
                                <span class="price-old"><i class="fd-cny">&yen;</i><strike>163.00<i class="unit">/个</strike></i></span>
                                <i class="tax-icon"></i>
                            </p>
                            <p class="offer-count">
                                <span class="sale"><span class='sale-count'>53</span><i class="unit"></i>已售</span>
                                <i class='space'> | </i>
                                <span class="inventory">剩余<span class='inventory-count'>222</span><i class="unit"></i>库存</span>
                            </p>
                            <a class="buy" href="" target="" title="">立即抢购</a>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </div>

less文件

.offer-list{
        &:hover{
            border:solid 2px #027CFF;
            height:372px;
            margin: -1px -2px 0-2px;
            .offer-list-item{
                margin-top: -1px;
            }
        }
        .underline{
            border-bottom: solid 1px #e3e3e3;
        }
        ul{
            margin-left: 10px;
        }
        .offer-list-item{
            height: 372px;
        }
  }

遇到的主要问题是hover后文字抖动,并且边框不能完美覆盖之前每个div下部的分割线。
解决方案:
1 遮挡分割线,整个加hover的div上移1px。
2 解决抖动问题,减少div的height。

方向是这两个,但是.first-list 的margin上移带来了其他问题,就是虽然高度设了,但hover时还是会向下掉1px。

这个问题找了好久,发现原来外层div margin为负时,并不会把这个div块都带着移动,里层的li就没有跟着移动,所以出现了怎么调都还是会看到div块向下抖动的问题,并且下边框还出现了遮住1px的问题。问题是ul层也没有设置overflow:hidden。

后来想到了给li用一个margin:-1px。两个问题一起解决啦。不过下边框被遮住的应该是是因为div设置的高度值问题。
其实有种比较简单的解决方法,那就是hover之前给div加白色边框占位,hover改变border颜色。这样很简单,但是不够通用,在这里就用不了,因为页面上有一个div的左上角有一个背景图片,白色的边框会在上面留下痕迹。没办法用。

margin经常会出现无效的情况,之前有遇到过,在这里也总结一下。

  1. margin-top失效
<div> 
<divclassdivclass="box1">float:left</div> 
<divclassdivclass="box2">clear:both;margin-top:20px;</div> 
</div> 

网上能找到的两种比较靠谱的解释:

1:“在CSS2.1中,水平的margin不会被折叠;垂直margin可能在一些盒模型中被折叠…”
2:当第一个层浮动,而第二个没浮动层的margin会被压缩,详见--浮动元素后非浮动元素的margin的处理。
得到解决问题思路:1一起浮动 2 两个div中间加一个div清除浮动。

2父元素里第一个子元素margin-top失效。它会默认为是父元素的margin。
解决办法:
1.给父容器box加overflow:hidden;属性
2.父容器box加border除none以外的属性
3.用父容器box的padding-top代替margin-top

参考文章:CSS中margin-top属性失效问题解决

知其然,知其所以然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值