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

The*_*Nik 14 css aspect-ratio css3 responsive-design

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

要求 :

  • 只有CSS
  • 无论视口的方向(横向或纵向)如何,方块的大小都必须适应视口的最小尺寸(宽度或高度).
  • 正方形必须在视口中以水平方向和垂直方向居中

例:

根据视口的宽度和高度保持纵横比

web*_*iki 21

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

  1. vmin单位:

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

  2. position: absolutemargin: auto;为中心

DEMO(调整窗口高度和宽度以查看其运行情况)

特征 :

  • 根据宽度和高度保持宽高比
  • 保持在视口中心和verticaly中心
  • 永远不会溢出视口

浏览器支持:

vmin对于IE9支持,IE10 +(canIuse)支持单位,你需要使用vm单位的后备而不是vmin像这样:

width: 100vm; /* <-- for IE9 */
height: 100vm; /* <-- for IE9 */
width: 100vmin; 
height: 100vmin;
Run Code Online (Sandbox Code Playgroud)

完整代码:

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;
}
Run Code Online (Sandbox Code Playgroud)
<div>whatever content you wish</div>
Run Code Online (Sandbox Code Playgroud)

  • 将身体边缘设置为0也很关键 (2认同)

eas*_*wee 5

您可以使用vw和vh单位(视口百分比长度)来确定响应方块的大小.

检查浏览器支持: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;
	}
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
	<div class="container-row">
		<div class="container-cell">
    		<div class="square"></div>
    	</div>
	</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • @easwee - 我用'web-tiki`答案更改了支票,因为他已经取得了相同的结果,但很简单 (2认同)