根据宽度和高度保持纵横比

时间:2014-05-13 11:34:46

标签: css css3 responsive-design aspect-ratio

可以在视口中放置方形div并使其居中,并始终根据宽度和高度保持宽高比?

要求:

  • 仅限CSS
  • 无论视口的方向(横向或纵向)如何,方块的大小都必须适应视口的最小尺寸(宽度或高度)。
  • 正方形必须在视口中居中并且在视口中垂直居中

示例:

Maintain aspect ratio according to width and height of viewport

4 个答案:

答案 0 :(得分:19)

要在视口中按照宽度和高度保持div的宽高比,您可以使用一个HTML标记:

  1. vmin 大小调整的单位:
      

    vmin 视口高度和宽度之间最小值的1/100。
      (来源:MDN

  2. position: absolutemargin: auto;用于居中
  3. DEMO (调整窗口高度和宽度以查看其效果)

    特点:

    • 根据宽度和高度
    • 保持其宽高比
    • 在viewport horizo​​ntaly和verticaly中保持居中
    • 永远不会溢出视口

    浏览器支持:

    对于IE9支持,IE10 +(canIuse)支持

    vmin单位,您需要使用vm单位而不是vmin的回退,如下所示:

    width: 100vm; /* <-- for IE9 */
    height: 100vm; /* <-- for IE9 */
    width: 100vmin; 
    height: 100vmin;
    

    完整代码:

    body {
      margin:0; /* To prevent scrollbars */
    }
    
    div{
      /* Aspect ratio */
      height:100vm; width:100vm; /* IE9 fallback */
      width: 100vmin; 
      height: 100vmin;
      /*Centering */
      position: absolute;
      top:0;bottom:0;
      left:0;right:0;
      margin: auto;
      /* styling */
      background: gold;
    }
    <div>whatever content you wish</div>

答案 1 :(得分:5)

您可以使用vw & vh units(视口百分比长度)来确定响应方块的大小。

检查浏览器支持:http://caniuse.com/viewport-units


实现水平和垂直缩放的解决方案

实时样本页面:http://sample.easwee.net/responsive-square/

.container {
    display:table;
    width:100%;
    height:100%;
}

.container-row {
    display:table-row;
}

.container-cell {
    display:table-cell;
    vertical-align:middle;
    text-align:center;
}

.square {
    display:inline-block;
    background:red;
    border: 3px solid blue;
}
@media(orientation:landscape) {
	.square {    	   
	    width: 100vh;
	    height: 100vh;
	}
}
@media(orientation:portrait) {
	.square{
	    width: 100vw;
	    height: 100vw;
	}
}
<div class="container">
	<div class="container-row">
		<div class="container-cell">
    		<div class="square"></div>
    	</div>
	</div>
</div>

答案 2 :(得分:1)

我结合了@ ken-sharpe和@easwee的优秀答案来创建非方形宽高比的版本:https://codepen.io/anon/pen/GyqopP

div {
  position: absolute;
  top:0;bottom:0;
  left:0;right:0;
  margin: auto;

  width: 100vw;
  height: 50vw;
  background: #326384;
}

@media (min-aspect-ratio: 2/1) {
    div {          
        width: 200vh;
        height: 100vh;
        background-color:green;
    }
}

答案 3 :(得分:-1)

使用类似的东西

.container{
    display:block;
    background:#f2f2f2;
}

.square{
    width:50%;
    padding-top:50%;
    margin: auto;
    background:#e5e5e5;
}

DEMO