为什么div不居中
P粉805922437
P粉805922437 2024-02-04 08:28:03
0
2
379

我试图将此元素置于屏幕中心,当我悬停时也是如此。

在下面的示例中,div 没有居中,即使当我将其悬停时,知道我也进行了 50% 变换,并且顶部/左侧也进行了变换,这就是我用来使元素居中的常用方法。

* {
  box-sizing: border-box;
}
body {
position: relative }

.zoom {
  padding: 50px;
  background-color: green;
  transition: transform .2s;
  width: 200px;
  height: 200px;
  margin: 0 auto;
  
  transform: scale(.2) translate(-50%, -50%);
  position: absolute;
      top: 50%;
    left: 50%;
}

.zoom:hover {
  -ms-transform: scale(1.5); /* IE 9 */
  -webkit-transform: scale(1.5); /* Safari 3-8 */
  transform: scale(1.5); 
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
 
</head>
<body>
 
<div class="zoom"></div>

</body>
</html>

P粉805922437
P粉805922437

全部回复(2)
P粉211600174

该错误位于 :hover 选择器中,因为转换中没有 translate() ,您基本上将其重置为 0,这不是您想要的。 因为它会忘记之前的内容并覆盖它。

这里有一个简单的解决方案:

.zoom:hover {
  transform: scale(1.5); 
}

.zoom:hover {
  transform: 
     scale(1.5)
     translate(-50%, -50%); /* add this */
}

这里有一个简单的解释:


现代解决方案(更少的代码):

使用 CSS 网格 https://developer.mozilla.org/ en-US/docs/Web/CSS/grid

使用 place-items 它将自动居中,无需任何转换或位置... https://developer.mozilla.org/en-US/docs/Web/CSS/place-items

此外,您不必在开始时对 0.2 进行缩放,只需从 scale(1) 开始,然后通过悬停更大的比例来使其更大,例如 4 。 (因此,在没有任何悬停的情况下,它不会在从 200px 到 0.2scale 过渡开始时产生该错误)


但是,如果您想让 CSS 在 IE 和旧版浏览器中也能工作,那么最好使用位置、平移、顶部、左侧...

但是您的用户使用的是现代浏览器,因此为了提高可读性并更简单地使用 Flexbox 或网格可能是一个好主意。

如需了解更多信息,请使用 https://caniuse.com (例如,任何浏览器 95% 都支持网格从 2020 年开始,Chrome 从 2017 年开始)



这里是 CSS 网格解决方案

html,
body {
  height: 100%;
}

body {
  display: grid;
  place-items: center;
  margin: 0;
}

.zoom {
  background-color: green;
  width: 50px;
  height: 50px;
  transition: transform 0.2s;
}

.zoom:hover {
  transform: scale(4);
}
  
P粉797855790

请记住,变换的顺序决定了元素的显示方式。您首先移动元素 top: 50%; left: 50%;,将其置于右下象限。然后你把它变小 transform:scale(0.2) 然后然后你把它向左移动现在较小尺寸 translate(-50%, -50%) 的 50%。

通过将翻译放在第一位,元素会变小之前居中。请记住,当您增加大小时,还要包含 translate(-50%, -50%),因为后续的翻译将覆盖当前的翻译,而不是添加到其中。

* {
  box-sizing: border-box;
}
html, body {
  height: 100%;
}
body {
position: relative }

.zoom {
  padding: 50px;
  background-color: green;
  transition: transform .2s;
  width: 200px;
  height: 200px;
  margin: 0 auto;
  
  transform: translate(-50%, -50%) scale(.2);
  position: absolute;
      top: 50%;
    left: 50%;
}

.zoom:hover {
  -ms-transform: translate(-50%, -50%) scale(1.5); /* IE 9 */
  -webkit-transform: translate(-50%, -50%) scale(1.5); /* Safari 3-8 */
  transform: translate(-50%, -50%) scale(1.5); 
}



 


 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板