javascript - 保持 div 居中,保持宽高比并垂直或水平调整大小

标签 javascript jquery html css

我可以找到多个半解决方案,但我正在寻找一个完整的解决方案来解决我的问题。我有一个 div,我想以固定的纵横比在屏幕上居中,该 div 本质上应该始终完全可见,以便 div 在保持纵横比的同时始终是最大的。无论垂直和水平调整窗口大小。

这里有一个代码笔:https://codepen.io/william-bang/pen/ZjyWRd

我创建的,这只能解决水平问题,不能解决垂直问题。我已经设法让它与 and 一起工作,但是为此调整大小的行为有所不同。我正在寻找 CSS 解决方案,尽管我对 JS 解决方案持开放态度,如果有人绝对确定不存在解决方案的话。

body {
  width: 100%;
  height: 100%;
}

.wrapper {
  width: 40%;
  height: 100%;
  margin: auto
}

.img {
  padding-top: 50%;
  width: 100%;
  background: #ccc;
  text-align: center;
}
<div class="wrapper">

  <div class="img">
    **IMG HERE**
  </div>
  
</div>

如果有任何建议,我将不胜感激,这让我困惑了好几个小时。提前致谢:)

更新,div 需要在不同的页面上保持其纵横比,并始终保持其自身的最大尺寸。

@Grenther 感谢您的回复,我尝试修改您给出的答案以完全使用 CSS 而不必使用 CSS 预处理器。这真的很顺利,直到我意识到 CSS 媒体查询不支持标准 CSS 变量,否则你提出的方法在没有 SCSS 的情况下也是可行的,但也许你已经知道了。

:root {
  --ogW: 1600;
  --ogH: 900;
  --ratio: calc( var(--ogW) / var(--ogH));
}

 body {
  width: 100%;
  height: 100%;
}

.ratio {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  
  @media screen and (max-width: 177vh) {
    width: 90vw; 
    height: calc( 90vw / var(--ratio)); 
  } 

  @media screen and (min-width: 177vh) {
    width: calc( 90vh * var(--ratio));  
    height: 90vh;
  }

}

.div {
  width: 100%;
  height: 100%;
  background: red;
  text-align: center;
}
<div class="ratio">

  <div class="div">
    
    Hello!
    
  </div>
  
</div>

最佳答案

最终更新:

它变成了一个 SCSS 问题,对于可变宽度或高度的任何输入都可以这样完成:

http://jsfiddle.net/832v5f0L/41

 $div-width : 1600;
 $div-height : 900;

 $ratio: $div-width / $div-height;

  @media screen and (max-width: (100 * $ratio) + vh) {
    width: 100vw; // always 100vw to fill
    height: (100 / $ratio) + vw; // 100 / ratio
  }

  @media screen and (min-width: (100 * $ratio) + vh) {
    width: (100 * $ratio) + vh;  //100 * ratio
    height: 100vh; // always 100vh to fill
  }

更新的答案:

当宽度小于高度时,媒体查询纵向自动激活。这确保我们可以使用 vh 和 vw 来获得最大可能的大小而不会溢出。

宽度和高度之间的比例将确保您可以获得固定的纵横比。

    body {
  width: 100%;
  height: 100%;
}
.wrapper {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

/* 
100vh * (100 / height) 
with hright 50:
100vh * 100 / 50 = 200vh
*/

@media screen and (max-width: 200vh) {
  .wrapper {
      width: 100vw;
      height: 50vw;
  }
}
@media screen and (min-width: 200vh) {
  .wrapper {
      width: 200vh;
      height: 100vh;
  }
}

.img {
/*   padding-top: 50%; */
  width: 100%;
  height: 100%;
  background: #ccc;
  text-align: center;
  background-img: url()
}
<div class="wrapper">

  <div class="img">
    **IMG HERE**
  </div>
  
</div>

更新: 最小 - 最大宽度查询

关于javascript - 保持 div 居中,保持宽高比并垂直或水平调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508192/

相关文章:

javascript - HTML/JavaScript - 带有自动 http/https 前缀的远程 img src

javascript - 使用 GPS 坐标修改 map 的中心

javascript - 将事件监听器添加到React Native ART组件

javascript - 按钮的绝对位置居中但现在全宽

html - 如何实现多个开关按钮?

javascript - Redux:将 Selector 与 Reducers 共存

javascript - MVC 操作方法和 JavaScript

javascript - Jquery .load - 从index.php到index.html相同域获取<div>特色产品(opencart)

javascript - 设置 javascript 时间以在页面未刷新时发出警报

html - 链接之前有效,但在最近更新后它失败了?