Hoe maak je een div 100% hoogte van het browservenster

Ik heb een lay-out met twee kolommen – een linker diven een rechter div.

De rechter divheeft een grijze background-coloren ik wil dat deze verticaal wordt uitgevouwen, afhankelijk van de hoogte van het browservenster van de gebruiker. Op dit moment eindigt de background-colorbij 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: 1vhis gelijk aan 1% van de hoogte van de viewport. Dat wil zeggen, 100vhis 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 vhals vwbevat.

Hoe verschilt 100vhvan 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 ptag is hier ingesteld op 100% hoogte, maar omdat de tag div200 pixels hoog heeft, wordt 100% van 200 pixels 200 pixels, niet100% van de bodyhoogte. Als u in plaats daarvan 100vhgebruikt, betekent dit dat de p-tag 100% van de bodyzal 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 vhgebruiken, wat relatief is ten opzichte van 1% van de hoogtevan de viewport…

Dat betekent dat als je de hoogte wilt afdekken, gewoon 100vhgebruikt.

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 vhzijn 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: flexop de bovenliggende elementen, en flex: 1op 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-unitsniet 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-objectals de browser vh-unitsniet 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 100vhheight/min-heightgebruikte, brak de lay-out wanneer de inhoud langer was dan een pagina. Als ik in plaats daarvan 100%height/min-heightgebruikte, 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 0of hoogte van de ouder, en dat is de reden waarom je nodig hebt om het bovenste element ingesteld een min-heightvan 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 vhNu:

#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 divbreedte 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 calcfunctie. 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:flexProperty.


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 vhgenoemd. De volledige hoogte van een pagina is
    100VH.
  • Viewport-breedte wordt vwgenoemd. 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.

9.4.1 Blokopmaak
contexten

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.

JSFiddle-voorbeeld

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

Gebruik FlexBox CSS

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 vheigenschapspercentage, 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: flexen 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;
}

Bron


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>

Other episodes