【发布时间】:2016-05-05 00:33:37
【问题描述】:
我想创建一个 HTML 页面:
- 左侧固定宽度、全高的导航窗格
- 剩余区域中心的方形元素
我希望这个正方形尽可能大,扩大以填充导航窗格未占用的区域。
我对此有一个 JavaScript 解决方案(见下文,jsFiddle),但我希望可以将其作为纯 CSS 解决方案。
<!DOCTYPE html>
<html lang=en>
<head>
<style>
html, body {
margin: 0;
height: 100%;
background-color: #fff;
}
nav {
height: 100%;
width: 96px;
background-color: #666;
}
main {
position: absolute;
background-color: #000;
color: #fff;
}
</style>
</head>
<body>
<nav>
Navigation
</nav>
<main>
This should be square
</main>
<script>
;(function createSquareArea() {
var main = document.querySelector("main")
var nav = document.querySelector("nav")
var navWidth = nav.getBoundingClientRect().width
var debounceDelay = 100
var timeout
window.onresize = windowResized
maintainRatio()
function windowResized() {
if (timeout) {
window.clearTimeout(timeout)
}
timeout = window.setTimeout(maintainRatio, debounceDelay)
}
function maintainRatio() {
timeout = 0
var windowHeight = window.innerHeight
var mainWidth = window.innerWidth - navWidth
var minDimension = Math.min(windowHeight, mainWidth)
var left = (mainWidth - minDimension) / 2 + navWidth
var top = (windowHeight - minDimension) / 2
main.style.left = left + "px"
main.style.top = top + "px"
main.style.width = minDimension + "px"
main.style.height = minDimension + "px"
}
})()
</script>
</body>
</html>
【问题讨论】:
-
这与您链接到的 [维护纵横比问题] (stackoverflow.com/questions/20590239/…) 不同,因为它需要垂直导航窗格,因此不能直接使用视口单位。
标签: css centering aspect-ratio