Div yüksekliği% 100 ve içeriğe uyacak şekilde genişler


172

Sayfamda yüksekliği% 100 olarak ayarlanmış bir div öğesi var. Vücudun yüksekliği de% 100 olarak ayarlanır. İç div bir arka plana ve hepsine sahiptir ve vücut arka planından farklıdır. Bu, div yüksekliğini tarayıcı ekran yüksekliğinin% 100'ü yapmak için çalışır, ancak sorun, bu div içinde tarayıcı ekran yüksekliğinin ötesine dikey olarak uzanan içeriğe sahip olmam. Aşağı kaydırdığımda div, sayfayı kaydırmaya başlamak zorunda kaldığınız noktada sona erer, ancak içerik bunun ötesine taşar. Div'in iç içeriğe uyacak şekilde her zaman dibe kadar gitmesini nasıl sağlayabilirim?

İşte CSS'imin basitleştirilmesi:

body {
    height:100%;
    background:red;
}

#some_div {
    height:100%;
    background:black;
}

Sayfayı kaydırdığımda, siyahlık sona erer ve içerik kırmızı arka plana akar. #Some_div'de konumu göreli veya mutlak olarak ayarlamam önemli değil, sorun her iki durumda da oluşuyor. #Some_div içindeki içerik çoğunlukla kesinlikle konumlandırılır ve dinamik olarak bir veritabanından oluşturulur, böylece yüksekliği önceden bilinemez.

Düzenleme: İşte sorunun ekran görüntüsü: div sorunu


Bu birkaç hafta önce soruldu. Bu soruyu bulabilir miyim bakacağım. Buna yorum yaptığımı düşünüyorum. düzenlemek Sorunuza benzer olduğuna inanıyorum: stackoverflow.com/questions/9398313/…
jmbertucci

daha iyi anlamak için kodunuzu lütfen
sandeep

tam kodunuzu gönderebilir misiniz pls
Sven Bieder

23
Tüm php kodu, css ve javascript binlerce satır ister misin? Css'nin soruyla ilgili kısmını yayınladım ...
Joey

2
NECROPOST IS A GO: taşma özelliğini ayarlayarak genellikle bir div içindeki içerik kendisine (son gerilirken bu gibi sorunları düzeltir overflow: hidden;, overflow: scroll;vs.).
AlbertEngelB

Yanıtlar:


308

İşte CSS tarzında yapmanız gerekenler, ana div

display: block;
overflow: auto;

Ve dokunma height


4
Harika çalıştı. Ben eklemek için gerekli height: 100%için html, bodyyeterli olsa içerik yokken o yüksekliğe doldurmak yapmak için konteyner div ve.
Nico Huysamen

şaşırtıcı bir çözüm ama eğer objektif duyarlı bir pencere montajı gibi bir şey ise aslında yüksekliğe dokunabilirsiniz
Alexis Rabago Carvajal

Is display: block;gerekli? Div'ler zaten blok düzeyinde öğelerdir.
Max Heiber

benim için bir iç kaydırma çubuğu ekliyor (hem yatay hem de dikey)
Nathan H

Ana öğeyi yine de alt öğelerden biraz daha uzun boylu buluyorsanız, fazladan boşluk olup olmadığını kontrol edin ve / veya  kaldırın. Ayrıca satır yüksekliğini ayarlamaya çalışın. Örneğin koydum line-height: 0, çünkü metne ihtiyacım yoktu, sadece bir görüntü göstermek için.
Zorgatone

57

Set heightiçin autove min-heightiçin 100%. Bu, çoğu tarayıcı için çözmelidir.

body {
  position: relative;
  height: auto;
  min-height: 100% !important;
}

3
IMO, bu, "Div'in iç içeriğe uyacak şekilde her zaman en alta nasıl gideceğini nasıl sorabilirim?" div / body'nin içeriğine uyacak şekilde genişlemesini sağlamak yerine taşma kaydırmayı etkinleştiren şu anda işaretli yanıttan daha iyi. +1
Jammerz858

Davam için çalıştı. Teşekkürler!
Tyson Nero

Bu ise bazı nedenlerden dolayı, bu işe yaramazsa o dikkati olabilir heightolduğunu 100%ve min-heightbir auto- Bunları bu durumda değiştirilebilir olmasını beklediğiniz, ama onlar gibi görünüyor değildir.
PeaBrain

13

Genellikle bu sorun, bir Ana Divanın Alt öğeleri yüzen olduğunda ortaya çıkar. İşte sorunun en son çözümü :

CSS dosyanıza sözde seçici ile birlikte .clearfix adlı şu sınıfı yazın : after

.clearfix:after {
content: "";
display: table;
clear: both;
}

Ardından, HTML'nizde .clearfix sınıfını üst Div'inize ekleyin. Örneğin:

<div class="clearfix">
    <div></div>
    <div></div>
</div>

Her zaman çalışmalı. Kodu daha semantik hale getireceğinden, sınıf adını .clearfix yerine .group olarak çağırabilirsiniz . "" Çift tırnak arasına, İçerik değerinde nokta veya boşluk bile eklemek gerekli değildir. Ayrıca taşma: otomatik; sorunu çözebilir ancak kaydırma çubuğunun gösterilmesi gibi başka sorunlara neden olur ve önerilmez.

Kaynak: Lisa Catalano ve Chris Coyier'in blogu


8

Sadece bırakırsanız height: 100%ve kullanmak içi içerik olarak çok boşluk olarak alacaktır . Bu şekilde tüm metinler siyah arka planda kalacaktır.display:block;divdiv


Nerede kullandın display: block? Bunu sorunuzda görmüyorum.
Orbit'te Hafiflik Yarışları

Ronnie önerdikten sonra #some_div'e ekledim, ancak sorunu çözmedi.
Joey

1
Float eklemeyi deneyebilir misiniz: none; Aynı #some_div css
RonnieVDPoel

Bunun yerine float: none;kullanın clear:both;. Aynı şeyi yapıyor ama daha çapraz tarayıcı, @RonnieVDPoel
Cannicide

7

Bu soru eski olabilir, ancak bir güncellemeyi hak ediyor. İşte bunu yapmanın başka bir yolu:

#yourdiv {
    display: flex;
    width:100%;
    height:100%;
}

1
Eski bir soruya mesaj gönderecekseniz, mevcut değerleri (AKA flex'de önek yok) kullanmanız önerilir.
jhpratt

Üzgünüm, neden bahsettiğini bilmiyorum.
user9459537

1
Esnek önekler bir süredir gerekli değil.
jhpratt

Ve hangileri?
user9459537

5

Bunu dene:

body { 
    min-height:100%; 
    background:red; 
} 

#some_div {
    min-height:100%; 
    background:black; 
} 

IE6 ve önceki sürümleri min-height özelliğini desteklemez.

Bence sorun, vücuda% 100 yüksekliğe sahip olduğunuzu söylediğinizde, arka planın yalnızca bir tarayıcı "görünüm alanı" (tarayıcı araç çubukları ve durum çubukları ve menubarları hariç tutan alan ve pencere kenarları). İçerik bir görünüm penceresinden daha uzunsa, arka plana ayrılan yükseklikten taşacaktır.

Gövdedeki bu minimum yükseklik özelliği, içeriğiniz bir sayfanın tamamını aşağıya kadar doldurmuyorsa, arka planın en az bir görünüm alanı kadar zorlanmalıdır, ancak daha fazla iç içeriği kapsayacak şekilde aşağı doğru büyümesine izin vermelidir.


3

Eski soru, ama benim durumumda kullanarak buldum benim position:fixediçin çözdü. Durumum biraz farklı olabilirdi. divSayfa yüklenirken görüntülenmesi gereken bir yükleme animasyonu ile yer paylaşımlı bir yarı saydam vardı . Bu yüzden height:auto / 100%veya min-height: 100%her ikisini birden kullanmak pencereyi doldurdu, ancak ekran dışı alanı doldurmadı. Kullanarak position:fixedbu bindirme kaydırması kullanıcıyla yapılmış, böylece her zaman görünür alanı kapladı ve önyükleme animasyonumu ekranda ortaladı.


1

Bu iki satırı css kimliğinize ekleyin #some_div

display: block;
overflow: auto;

Bundan sonra aradığınızı alacaksınız!


0

Soruyu anladığımdan tam olarak emin değilim, çünkü bu oldukça basit bir cevap, ama işte gidiyor ... :)

Kabın taşma özelliğini görünür veya otomatik olarak ayarlamayı denediniz mi?

#some_div {
    height:100%;
    background:black; 
    overflow: visible;
    }

Bunu eklemek, siyah kabı dinamik kabınızın gerektirdiği boyuta itmelidir. Otomatik olarak görünmeyi tercih ederim çünkü otomatik kaydırma çubuklarıyla geliyor ...


0

Modern tarayıcılar "görüntü alanı yüksekliği" birimini destekler. Bu, div'i kullanılabilir görünüm yüksekliğine genişletir. Diğer yaklaşımlardan daha güvenilir buluyorum.

#some_div {
    height: 100vh;
    background: black;
}

0

Bunu bile yapabilirsin

display:block;
overflow:auto;
height: 100%;

Bu, içeriğe göre her bir dinamik div'inizi içerecektir. Sınıfla ortak bir div'iniz varsa, içeriğe göre her dinamik div'in yüksekliğini artıracağını varsayalım


0

Ayrıca kullanabilirsiniz

 display: inline-block;

benimki bununla çalıştı


0

POZİSYON OLMADAN OVERLAY: SABİT

Son bir menü için bunu anladım gerçekten harika bir yol vücudu ayarlamak oldu:

position: relative

ve sarmalayıcı sınıfınızı şu şekilde ayarlayın:

#overlaywrapper {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    background: #00000080;
    z-index: 100;
}

Bu, konumu sabit olarak ayarlamanız gerekmediği ve yine de kaydırmaya izin verebileceğiniz anlamına gelir. Ben gerçekten büyük menü bindirme için kullandım.


0

flex kullan

.parent{
    display: flex
}

.fit-parent{
    display: flex;
    flex-grow: 1
}

0

Tamam, böyle bir şey denedim:

gövde (normal)

#MainDiv { 
  /* where all the content goes */
  display: table;
  overflow-y: auto;
}

Yazmanın tam yolu bu değildir, ancak ana div ekranını tablo olarak yaparsanız genişler ve sonra kaydırma çubuklarını uyguladım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.