otheranswers で見たものから、CSSビューポートユニットはcalc()
ステートメントでまだ使用できません。私が達成したいのは、次の声明です。
height: calc(100vh - 75vw)
ビューポート単位をcalc()
ステートメントで使用できない場合でも、これを達成できる回避策はありますか?純粋にCSSを使用それともCSSとHTMLだけですか? javascriptを使用して動的に実行できることは知っていますが、CSSを好むでしょう。
これに答える前に、ChromeおよびIE 10+が実際にビューポート単位での計算をサポートしていることを指摘したいと思います。
1)高さを100vhに設定して開始します。
2)ボックスサイズをborder-boxに設定して-75vwのパディングトップを追加します。これは、パディングが内側の高さの一部になることを意味します。
3)余分な余白をマイナスの余白でオフセットするだけ
div
{
/*height: calc(100vh - 75vw);*/
height: 100vh;
margin-top: -75vw;
padding-top: 75vw;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: pink;
}
回避策として、垂直方向のパディング率とマージンをコンテナー幅から計算するという事実を使用できます。それは非常にい解決策であり、あなたがそれを使用できるかどうかはわかりませんが、うまくいきます: http://jsfiddle.net/bFWT9/
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div>It works!</div>
</body>
</html>
html, body, div {
height: 100%;
}
body {
margin: 0;
}
div {
box-sizing: border-box;
margin-top: -75%;
padding-top: 75%;
background: #d35400;
color: #fff;
}
<div>It's working fine.....</div>
div
{
height: calc(100vh - 8vw);
background: #000;
overflow:visible;
color: red;
}
ここでこのCSSコードをチェックして、Operaなしのすべてのブラウザをサポートしてください
ライブ
CSSグリッドでこれを行うのは非常に簡単です。トリックは、グリッドの高さを100vwに設定し、行の1つを75vwに割り当て、残りの1つ(オプション)を1frに割り当てることです。これは、私があなたが望んでいるものであると推測するものから、比率ロックされたサイズ変更コンテナを提供します。
ここの例: https://codesandbox.io/s/21r4z95p7j
別の「アイテム」を追加するだけで、下のガタースペースを選択することもできます。
編集:StackOverflowの組み込みコードランナーには、いくつかの副作用があります。 codesandboxリンクにポップすると、実際の比率が表示されます。
body {
margin: 0;
padding: 0;
background-color: #334;
color: #eee;
}
.main {
min-height: 100vh;
min-width: 100vw;
display: grid;
grid-template-columns: 100%;
grid-template-rows: 75vw 1fr;
}
.item {
background-color: #558;
padding: 2px;
margin: 1px;
}
.item.dead {
background-color: transparent;
}
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="src/index.css" />
</head>
<body>
<div id="app">
<div class="main">
<div class="item">Item 1</div>
<!-- <div class="item dead">Item 2 (dead area)</div> -->
</div>
</div>
</body>
</html>