使用CSS从中间而不是顶部和左侧展开div

前端之家收集整理的这篇文章主要介绍了使用CSS从中间而不是顶部和左侧展开div前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不知道这是否可行,但我认为使用CSS变换创建一个效果,其中div从中心扩展到预定的高度和宽度,而不仅仅是从左上角。

例如,如果我有(demo)

<div id="square"></div>

(为简洁起见,供应商前缀不详)

#square {
    width: 10px;
    height: 10px;
    background: blue;
    transition: width 1s,height 1s;
}
#square:hover {
    width: 100px;
    height: 100px;
}

在悬停时,这将会将正方形向右扩展到100像素。我想从中间扩大。

我知道我可以使用transform:scale(x)(demo),但是这并没有真正为我提供一个非常“像素完美”的布局(因为它是以百分比为基础的),它也不会影响周围的布局(使文档流中的其他元素调整为调整大小)。这本质上是我想做的,除了文档流程受到相应的影响。

有没有人知道一个方法来做这个没有javascript?

解决方法

关键是通过公式来转移差额。有一点点“摆动”,如果是漂浮在转换过程中令人烦恼的话。

加入选项

选项1:在其周围保留的空间扩展http://jsfiddle.net/xcWge/14/

#square {
    width: 10px;
    height: 10px;
    margin: 100px; /*for centering purposes*/
    background: blue;
    -webkit-transition: width 1s,height 1s,margin 1s;
    -moz-transition: width 1s,margin 1s;
    -ms-transition: width 1s,margin 1s;
    transition: width 1s,margin 1s;
}
#square:hover {
    width: 100px;
    height: 100px;
    margin: 55px; /* inital margin - ((intial margin - width (or height))/2) */
}

选项2:扩展其周围的元素http://jsfiddle.net/xcWge/18/

#square {
    width: 10px;
    height: 10px;
    margin: 0; /*for centering purposes*/
    background: blue;
    -webkit-transition: width 1s,margin 1s;
}
#square:hover {
    width: 110px;
    height: 110px;
    margin: -50px; /* inital margin - ((intial margin - width (or height))/2) */
}

选项3:扩展元素之前的流程和移动元素后http://jsfiddle.net/xcWge/22/

#square {
    width: 10px;
    height: 10px;
    margin: 0;
    position: relative;
    top: 0;
    left: 0;
    background: blue;
    -webkit-transition: width 1s,top 1s,left 1s,margin 1s ;
    transition: width 1s,margin 1s;
}
#square:hover {
    width: 110px;
    height: 110px;
    top: -50px; /* inital top- (intial top-height)/2) */
    left: -50px; /* inital left- (intial left-width)/2) */
    margin-right: -50px;
    margin-bottom: -50px;
}
原文链接:https://www.f2er.com/css/220020.html

猜你在找的CSS相关文章