Ik heb een lay-out met twee kolommen – een linker div
en een rechter div
.
De rechter div
heeft een grijze background-color
en ik wil dat deze verticaal wordt uitgevouwen, afhankelijk van de hoogte van het browservenster van de gebruiker. Op dit moment eindigt de background-color
bij het laatste stukje inhoud in die div
.
Ik heb height:100%
, min-height:100%;
, enzovoort geprobeerd.
Antwoord 1, autoriteit 100%
Er zijn een aantal CSS 3-maateenheden genaamd:
Viewport-percentage (of Viewport-Relative)Lengtes
Wat zijn Viewport-Percentage Lengths?
Van de gelinkte W3-kandidaataanbeveling hierboven:
De lengtes van het kijkvenster zijn relatief ten opzichte van de grootte van het oorspronkelijke blok. Wanneer de hoogte of breedte van het oorspronkelijke bevattende blok wordt gewijzigd, worden ze overeenkomstig geschaald.
Deze eenheden zijn vh
(viewport-hoogte), vw
(viewport-breedte), vmin
(viewport minimumlengte) en vmax
(maximale lengte van de viewport).
Hoe kan dit worden gebruikt om een scheidingslijn de hoogte van de browser te laten vullen?
Voor deze vraag kunnen we gebruik maken van vh
: 1vh
is gelijk aan 1% van de hoogte van de viewport. Dat wil zeggen, 100vh
is gelijk aan de hoogte van het browservenster, ongeacht waar het element zich in de DOM-boom bevindt:
HTML
<div></div>
CSS
div {
height: 100vh;
}
Dit is letterlijk alles wat nodig is. Hier is een JSFiddle-voorbeeldhiervan in gebruik.
Welke browsers ondersteunen deze nieuwe eenheden?
Dit wordt momenteel ondersteund in alle up-to-date grote browsers, behalve Opera Mini. Bekijk Kan ik gebruiken…voor verdere ondersteuning.
Hoe kan dit worden gebruikt met meerdere kolommen?
In het geval van de voorliggende vraag, met een linker- en een rechterverdeler, is hier een JSFiddle voorbeeldmet een lay-out met twee kolommen die zowel vh
als vw
bevat.
Hoe verschilt 100vh
van 100%
?
Neem bijvoorbeeld deze lay-out:
<body style="height: 100%">
<div style="height: 200px">
<p style="height: 100%; display: block;">Hello, world!</p>
</div>
</body>
De p
tag is hier ingesteld op 100% hoogte, maar omdat de tag div
200 pixels hoog heeft, wordt 100% van 200 pixels 200 pixels, niet100% van de body
hoogte. Als u in plaats daarvan 100vh
gebruikt, betekent dit dat de p
-tag 100% van de body
zal zijn, ongeacht de div
-hoogte. Bekijk deze bij JSFiddleom het verschil gemakkelijk te zien!
Antwoord 2, autoriteit 19%
Als u de hoogte van een <div>
of een ander element wilt instellen, moet u de hoogte van <body>
en <html>
ook naar 100%. Dan kun je de hoogte van het element instellen met 100% 🙂
Hier is een voorbeeld:
body, html {
height: 100%;
}
#right {
height: 100%;
}
Antwoord 3, autoriteit 10%
Als je je elementen absoluut kunt positioneren,
position: absolute;
top: 0;
bottom: 0;
zou het doen.
Antwoord 4, autoriteit 5%
U kunt de view-port-eenheid in CSS gebruiken:
HTML:
<div id="my-div">Hello World!</div>
CSS:
#my-div {
height: 100vh; /* vh stands for view-port height, 1vh is 1% of screen height */
}
Antwoord 5, autoriteit 5%
U kunt in dit geval vh
gebruiken, wat relatief is ten opzichte van 1% van de hoogtevan de viewport…
Dat betekent dat als je de hoogte wilt afdekken, gewoon 100vh
gebruikt.
Kijk naar de afbeelding hieronder die ik hier voor je teken:
Probeer het fragment dat ik voor je heb gemaakt, zoals hieronder:
.left {
height: 100vh;
width: 50%;
background-color: grey;
float: left;
}
.right {
height: 100vh;
width: 50%;
background-color: red;
float: right;
}
<div class="left"></div>
<div class="right"></div>
Antwoord 6, autoriteit 4%
Alle andere oplossingen, inclusief de meest gestemde met vh
zijn suboptimaal in vergelijking met de flex modeloplossing.
Met de komst van het CSS flex-model, lost het 100% hoogteprobleem wordt heel, heel gemakkelijk: gebruik height: 100%; display: flex
op de bovenliggende elementen, en flex: 1
op de onderliggende elementen. Ze nemen automatisch alle beschikbare ruimte in hun container in beslag.
Merk op hoe eenvoudig de opmaak en de CSS zijn. Geen tafelhacks of iets dergelijks.
Het flex-model wordt ondersteund door alle belangrijke browsersevenals IE11+.
html, body {
height: 100%;
}
body {
display: flex;
}
.left, .right {
flex: 1;
}
.left {
background: orange;
}
.right {
background: cyan;
}
<div class="left">left</div>
<div class="right">right</div>
Antwoord 7, autoriteit 2%
Je vermeldt een paar belangrijke details niet, zoals:
- Is de lay-out een vaste breedte?
- Heeft een of beide kolommen een vaste breedte?
Hier is een mogelijkheid:
body,
div {
margin: 0;
border: 0 none;
padding: 0;
}
html,
body,
#wrapper,
#left,
#right {
height: 100%;
min-height: 100%;
}
#wrapper {
margin: 0 auto;
overflow: hidden;
width: 960px; // width optional
}
#left {
background: yellow;
float: left;
width: 360px; // width optional but recommended
}
#right {
background: grey;
margin-left: 360px; // must agree with previous width
}
<html>
<head>
<title>Example</title>
</head>
<body>
<div id="wrapper">
<div id="left">
Left
</div>
<div id="right"></div>
</div>
</body>
</html>
Antwoord 8
Dit is wat voor mij werkte:
<div style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; background: red;"> </div>
Antwoord 9
Hier is een oplossing voor de hoogte.
Gebruik in je CSS:
#your-object: height: 100vh;
Gebruik modernizr voor browsers die vh-units
niet ondersteunen.
Voeg dit script toe (om detectie toe te voegen voor vh-units
)
// https://github.com/Modernizr/Modernizr/issues/572
// Similar to http://jsfiddle.net/FWeinb/etnYC/
Modernizr.addTest('cssvhunit', function() {
var bool;
Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {
var height = parseInt(window.innerHeight/2,10),
compStyle = parseInt((window.getComputedStyle ?
getComputedStyle(elem, null) :
elem.currentStyle)["height"],10);
bool= !!(compStyle == height);
});
return bool;
});
Gebruik ten slotte deze functie om de hoogte van de viewport toe te voegen aan #your-object
als de browser vh-units
niet ondersteunt:
$(function() {
if (!Modernizr.cssvhunit) {
var windowH = $(window).height();
$('#your-object').css({'height':($(window).height())+'px'});
}
});
Antwoord 10
Zelfs met alle antwoorden hier, was ik verrast te ontdekken dat geen enkele het probleem echt oploste. Als ik 100vh
height
/min-height
gebruikte, brak de lay-out wanneer de inhoud langer was dan een pagina. Als ik in plaats daarvan 100%
height
/min-height
gebruikte, brak de lay-out wanneer de inhoud kleiner was dan de paginahoogte.
De oplossing die ik vond, die beide gevallen oploste, was om de bovenste twee antwoorden te combineren:
html, body, #mydiv {
height: 100%;
min-height: 100vh;
}
Antwoord 11
100%
werkt anders voor breedte en hoogte.
Als u width: 100%
opgeeft, betekent dit “100% van de beschikbare breedte van het bovenliggende element of de breedte van het venster innemen.”
Als u de optie height: 100%
, het betekent alleen maar “het nemen van 100% van de beschikbare hoogte van het bovenliggende element.” Dit betekent dat als u niet beschikt over een hoogte opgeven op topniveau element, zal de hoogte van alle kinderen ofwel 0
of hoogte van de ouder, en dat is de reden waarom je nodig hebt om het bovenste element ingesteld een min-height
van raamhoogte.
I lichaam specificeren altijd een minimum hoogte van 100vh hebben en maakt plaatsing en eenvoudige berekeningen,
body {
min-height: 100vh;
}
Antwoord 12
Probeer deze – getest:
body {
min-height: 100%;
}
#right, #left {
height: 100%;
}
Edit: 2020 update:
U kunt vh
Nu:
#right, #left {
height: 100vh
}
Antwoord 13
100vw = 100% van de breedte van het kijkvenster.
100vh = 100% van de hoogte van het kijkvenster.
Als u de div
breedte of hoogte van 100% van de browser-window-grootte die u moet gebruiken:
Voor breedte: 100vw
Voor hoogte: 100vh
Of als u wilt instellen kleiner formaat, gebruikt u de CSS calc
functie. Voorbeeld:
#example {
width: calc(100vw - 32px)
}
Antwoord 14
Add min-height: 100%
en hebben een hoogte niet te geven (of zet het op auto). Het geheel deed het werk voor mij:
.container{
margin: auto;
background-color: #909090;
width: 60%;
padding: none;
min-height: 100%;
}
Antwoord 15
De eenvoudigste manier is om het zo te doen.
div {
background: red;
height: 100vh;
}
body {
margin: 0px;
}
<div></div>
Antwoord 16
Er zijn verschillende methoden beschikbaar om de hoogte van een <div>
in te stellen op 100%.
Methode (A):
html,
body {
height: 100%;
min-height: 100%;
}
.div-left {
height: 100%;
width: 50%;
background: green;
}
.div-right {
height: 100%;
width: 50%;
background: gray;
}
<div class="div-left"></div>
<div class="div-right"></div>
Antwoord 17
Dit werkte voor mij:
html, body {
height: 100%; /* IMPORTANT!!! Stretches viewport to 100% */
}
#wrapper {
min-height: 100%; /* Minimum height for a modern browser */
height:auto !important; /* Important rule for a modern browser */
height:100%; /* Minimum height for Internet Explorer */
overflow: hidden !important; /* Firefox scroll-bar */
}
Genomen van deze pagina.
Antwoord 18
Probeer height:100%
in html
& AMP; body
html,
body {
height: 100%;
}
en als u 2 div-hoogte hetzelfde gebruikt of het ouderelement instelt display:flex
Property.
Antwoord 19
Een volledige pagina wordt een ‘viewport’ genoemd en u kunt een element ontwerpen volgens zijn viewport in CSS3.
Dergelijke eenheden worden viewport-percentage lengtes genoemd en zijn ten opzichte van de grootte van het initiële bevattende blok.
- Viewport-hoogte wordt
vh
genoemd. De volledige hoogte van een pagina is
100VH. - Viewport-breedte wordt
vw
genoemd. De volledige hoogte van een pagina is
100VW. - Er bestaat ook VMIN (Minimum Lengte van viewport) en Vmax (viewport
maximale lengte).
Dus nu kan uw probleem eenvoudig worden opgelost door het volgende toe te voegen aan uw CSS:
.classname-for-right-div /*You could also use an ID*/ {
height: 100vh;
}
Hier is informatie over de viewport-relatieve lengtes
Antwoord 20
Blokelementen consumeren de volledige breedte van hun ouder, standaard.
Dit is hoe ze aan hun ontwerpvereiste voldoen, die verticaal is.
In een blokopmaakcontext worden dozen een na de ander aangelegd,
verticaal, beginnend aan de bovenkant van een bevattend blok.
Dit gedrag strekt zich echter niet uit naar de hoogte.
Standaard zijn de meeste elementen de hoogte van hun inhoud (height: auto
).
In tegenstelling tot breedte, moet je een hoogte opgeven als je extra ruimte wilt.
Houd daarom deze twee dingen in gedachten:
- tenzij je de volledige breedte wilt, moet je de breedte van een blokelement definiëren
- tenzij je de hoogte van de inhoud wilt, moet je de hoogte van een element definiëren
.Contact {
display: flex; /* full width by default */
min-height: 100vh; /* use full height of viewport, at a minimum */
}
.left {
flex: 0 0 60%;
background-color: tomato;
}
.right {
flex: 1;
background-color: pink;
}
body { margin: 0; } /* remove default margins */
<div class="Contact">
<section class="left">
<div class="">
<h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</h1>
</div>
</section>
<section class="right">
<img />
</section>
</div>
Antwoord 21
Gebruik gewoon de eenheid “vh” in plaats van “px”, wat de hoogte van de kijkpoort betekent.
height: 100vh;
Antwoord 22
Hier is iets dat niet precies lijkt op wat u in eerdere antwoorden had, maar het kan voor sommigen nuttig zijn:
body {
display: flex;
flex-direction: column;
height: 100vh;
margin: 0px;
}
#one {
background-color: red;
}
#two {
margin-top: 0px;
background-color: black;
color: white;
overflow-y: scroll;
}
https://jsfiddle.net/newdark/qyxkk558/10/
Antwoord 23
Een van de opties is het gebruik van een CSS-tabel. Het heeft geweldige browserondersteuning en werkt zelfs in Internet Explorer 8.
html, body {
height: 100%;
margin: 0;
}
.container {
display: table;
width: 100%;
height: 100%;
}
.left, .right {
display: table-cell;
width: 50%;
}
.right {
background: grey;
}
<div class="container">
<div class="left"></div>
<div class="right"></div>
</div>
Antwoord 24
Probeer dit eens…
*{
padding:0;
margin:0;
}
.parent_div{
overflow:hidden;
clear:both;
color:#fff;
text-align:center;
}
.left_div {
float: left;
height: 100vh;
width: 50%;
background-color: blue;
}
.right_div {
float: right;
height: 100vh;
width: 50%;
background-color: green;
}
<div class=" parent_div">
<div class="left_div">Left</div>
<div class="right_div">Right</div>
</div>
Antwoord 25
Flexbox is perfect geschikt voor dit soort problemen. Hoewel Flexbox vooral bekend staat om het opmaken van inhoud in horizontale richting, werkt Flexbox eigenlijk net zo goed voor verticale opmaakproblemen. Het enige wat je hoeft te doen is de verticale secties in een flexcontainer te wikkelen en te kiezen welke je wilt uitbreiden. Ze nemen automatisch alle beschikbare ruimte in hun container in beslag.
Antwoord 26
Wat voor mij het beste werkte, was het gebruik van de eigenschap vh
.
In mijn React-toepassing wilde ik dat de div overeenkwam met de pagina hoog, zelfs als het formaat werd gewijzigd. Ik heb height: 100%;
, overflow-y: auto;
geprobeerd, maar geen van hen werkte bij het instellen van height:(your percent)vh;
het werkte zoals bedoeld.
Opmerking: als je opvulling, ronde hoeken, enz. gebruikt, zorg er dan voor dat je die waarden aftrekt van je vh
eigenschapspercentage, anders voegt het extra hoogte toe en verschijnen er schuifbalken. Hier is mijn voorbeeld:
.frame {
background-color: rgb(33, 2, 211);
height: 96vh;
padding: 1% 3% 2% 3%;
border: 1px solid rgb(212, 248, 203);
border-radius: 10px;
display: grid;
grid-gap: 5px;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: 50px 100px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr);
}
Antwoord 27
U kunt display: flex
en height: 100vh
gebruiken
html, body {
height: 100%;
margin: 0px;
}
body {
display: flex;
}
.left, .right {
flex: 1;
}
.left {
background: orange;
}
.right {
background: cyan;
}
<div class="left">left</div>
<div class="right">right</div>
Antwoord 28
Je moet twee dingen doen, één is om de hoogte in te stellen op 100%, wat je al deed. Ten tweede wordt de positie op absoluut ingesteld. Dat zou moeten lukken.
html,
body {
height: 100%;
min-height: 100%;
position: absolute;
}
Antwoord 29
Probeer de volgende CSS:
html {
min-height: 100%;
margin: 0;
padding: 0;
}
body {
height: 100%;
}
#right {
min-height: 100%;
}
Antwoord 30
.wrapper {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
height: 100vh; // Height window (vh)
}
.wrapper .left{
width: 80%; // Width optional, but recommended
}
.wrapper .right{
width: 20%; // Width optional, but recommended
background-color: #dd1f26;
}
<!--
vw: hundredths of the viewport width.
vh: hundredths of the viewport height.
vmin: hundredths of whichever is smaller, the viewport width or height.
vmax: hundredths of whichever is larger, the viewport width or height.
-->
<div class="wrapper">
<div class="left">
Left
</div>
<div class="right">
Right
</div>
</div>