Div chiều cao 100% và mở rộng để phù hợp với nội dung


172

Tôi có một yếu tố div trên trang của mình với chiều cao được đặt thành 100%. Chiều cao của cơ thể cũng được đặt thành 100%. Div bên trong có một nền tảng và tất cả những điều đó và khác với nền cơ thể. Điều này hoạt động để làm cho chiều cao div 100% chiều cao màn hình trình duyệt, nhưng vấn đề là tôi có nội dung bên trong div đó kéo dài theo chiều dọc vượt quá chiều cao màn hình trình duyệt. Khi tôi cuộn xuống, div kết thúc tại điểm mà bạn phải bắt đầu cuộn trang, nhưng nội dung vượt quá điều đó. Làm thế nào để tôi làm cho div luôn luôn đi đến tận cùng để phù hợp với nội dung bên trong?

Đây là một sự đơn giản hóa CSS của tôi:

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

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

Khi tôi cuộn trang, màu đen kết thúc và nội dung chảy trên nền đỏ. Dường như không quan trọng tôi đặt positon thành tương đối hay tuyệt đối trên #some_div, vấn đề xảy ra theo một trong hai cách. Nội dung bên trong #some_div hầu hết được định vị hoàn toàn và nó được tạo động từ cơ sở dữ liệu để không thể biết trước chiều cao của nó.

Chỉnh sửa: Đây là một ảnh chụp màn hình của vấn đề: vấn đề div


Điều này đã được hỏi một vài tuần trước. Tôi sẽ xem nếu tôi có thể tìm thấy câu hỏi đó. Tôi tin rằng tôi đã nhận xét về nó. chỉnh sửa Tôi tin rằng câu hỏi của bạn tương tự như thế này: stackoverflow.com/questions/9398313/
Khăn

xin vui lòng mã của bạn để hiểu rõ hơn
sandeep

bạn có thể gửi mã đầy đủ của mình được không
Sven Bieder

23
Bạn muốn tất cả hàng ngàn dòng mã php, css và javascript của tôi? Tôi đã đăng phần css có liên quan đến câu hỏi ...
Joey

2
NECROPOST là một GO: thiết lập thuộc tính overflow thường sửa chữa các vấn đề như thế này mà nội dung bên trong một div được kéo dài qua nó ( overflow: hidden;, overflow: scroll;, vv).
AlbertEngelB

Câu trả lời:


308

Đây là những gì bạn nên làm theo phong cách CSS, trên chính div

display: block;
overflow: auto;

Và đừng chạm vào height


4
Làm việc tuyệt vời. Tôi cần phải thêm height: 100%vào html, bodyvà div container để làm cho nó lấp đầy chiều cao khi không có đủ nội dung.
Nico Huysamen

giải pháp tuyệt vời nhưng bạn thực sự có thể chạm vào chiều cao nếu objetive giống như một cửa sổ phù hợp đáp ứng
Alexis Rabago Carvajal

display: block;cần thiết? Div đã là các yếu tố cấp khối.
Tối đa Heiber

nó thêm một thanh cuộn bên trong cho tôi (cả ngang và dọc)
Nathan H

Nếu bạn vẫn nhận được phần tử cha cao hơn một chút so với phần tử con, thì hãy kiểm tra xem có thêm khoảng trắng nào không và / hoặc  , loại bỏ chúng. Cũng cố gắng điều chỉnh chiều cao dòng. Ví dụ tôi đã đặt line-height: 0, vì tôi không cần văn bản, chỉ để hiển thị một hình ảnh.
Zorgatone

57

Đặt heightthành automin-heightđến 100%. Điều này sẽ giải quyết nó cho hầu hết các trình duyệt.

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

3
IMO, điều này trả lời câu hỏi "Làm thế nào để div luôn luôn đi đến tận cùng để phù hợp với nội dung bên trong?" tốt hơn câu trả lời hiện được đánh dấu, chỉ đơn giản là bật cuộn tràn hơn là đảm bảo div / body mở rộng để phù hợp với nội dung của nó. +1
Jammerz858

Làm việc cho trường hợp của tôi. Cám ơn!
Tyson Nero

Có thể đáng lưu ý rằng vì một số lý do, nó không hoạt động nếu height100%min-heightauto- tôi hy vọng những thứ này có thể thay thế cho nhau trong trường hợp này, nhưng có vẻ như chúng không có.
PeaBrain

13

Thông thường, vấn đề này phát sinh khi các phần tử Con của Div mẹ được thả nổi. Đây là giải pháp mới nhất của vấn đề:

Trong tệp CSS của bạn, hãy viết lớp sau có tên .clearfix cùng với bộ chọn giả : sau

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

Sau đó, trong HTML của bạn, thêm lớp .clearfix vào Div cha của bạn. Ví dụ:

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

Nó nên hoạt động luôn. Bạn có thể gọi tên lớp là .group thay vì .clearfix , vì nó sẽ làm cho mã có ngữ nghĩa hơn. Lưu ý rằng, Không cần thiết phải thêm dấu chấm hoặc thậm chí là khoảng trắng trong giá trị Nội dung giữa dấu ngoặc kép "". Ngoài ra, tràn: tự động; có thể giải quyết vấn đề nhưng nó gây ra các vấn đề khác như hiển thị thanh cuộn và không được khuyến nghị.

Nguồn: Blog của Lisa Catalano và Chris Coyier


8

Nếu bạn chỉ rời height: 100%và sử dụng display:block;các divsẽ mất không gian nhiều càng tốt các nội dung bên trong div. Bằng cách này, tất cả các văn bản sẽ ở trong nền đen.


Bạn đã sử dụng ở display: blockđâu? Tôi không thấy điều đó trong câu hỏi của bạn.
Các cuộc đua Lightness trong Orbit

Tôi đã thêm nó vào #some_div sau khi Ronnie đề xuất, nhưng nó không khắc phục được vấn đề.
Joey

1
Bạn có thể thử thêm float: none; đến cùng css
#some_div

Thay vì float: none;sử dụng clear:both;. Nó cũng làm điều tương tự nhưng nhiều trình duyệt chéo hơn, @RonnieVDPoel
Cần sa

6

Câu hỏi này có thể cũ, nhưng nó xứng đáng được cập nhật. Đây là một cách khác để làm điều đó:

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

1
Nếu bạn định đăng một câu hỏi cũ, sử dụng các giá trị hiện tại (AKA không có tiền tố trên flex) được khuyến nghị.
jhpratt

Xin lỗi tôi không biết bạn đang nói về cái gì.
dùng9459537

1
Tiền tố Flex không cần thiết trong một thời gian dài.
jhpratt

Và đó là những gì?
dùng9459537

5

Thử cái này:

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

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

IE6 và các phiên bản trước đó không hỗ trợ thuộc tính min-height.

Tôi nghĩ vấn đề là khi bạn bảo cơ thể có chiều cao 100%, nền của nó chỉ có thể cao bằng chiều cao của một "khung nhìn" của trình duyệt (khu vực xem không bao gồm các thanh công cụ & thanh công cụ & thanh công cụ của trình duyệt và cạnh cửa sổ). Nếu nội dung cao hơn một khung nhìn, nó sẽ vượt quá chiều cao dành cho nền.

Thuộc tính chiều cao tối thiểu này trên cơ thể sẽ tạo ra nền tối thiểu cao bằng một khung nhìn nếu nội dung của bạn không lấp đầy toàn bộ một trang xuống phía dưới, nhưng nó cũng nên để nó phát triển xuống dưới để bao quát thêm nội dung bên trong.


3

Câu hỏi cũ, nhưng trong trường hợp của tôi, tôi thấy sử dụng position:fixednó đã giải quyết nó cho tôi. Tình hình của tôi có thể có một chút khác biệt mặc dù. Tôi đã có một lớp phủ bán trong suốt divvới hình ảnh động đang tải mà tôi cần hiển thị trong khi trang đang tải. Vì vậy, sử dụng height:auto / 100%hoặc min-height: 100%cả hai lấp đầy cửa sổ nhưng không phải là khu vực ngoài màn hình. Sử dụng position:fixedđã thực hiện cuộn lớp phủ này với người dùng, vì vậy nó luôn bao phủ vùng hiển thị và giữ cho hình ảnh động tải trước của tôi tập trung vào màn hình.


1

Chỉ cần thêm hai dòng này vào id css của bạn #some_div

display: block;
overflow: auto;

Sau đó, bạn sẽ nhận được những gì bạn đang tìm kiếm!


0

Tôi không hoàn toàn chắc chắn rằng tôi đã hiểu câu hỏi bởi vì đây là một câu trả lời khá đơn giản, nhưng ở đây đi ... :)

Bạn đã thử đặt thuộc tính tràn của container thành hiển thị hoặc tự động chưa?

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

Thêm vào đó sẽ đẩy container đen đến bất kỳ kích thước nào mà container động của bạn yêu cầu. Tôi thích tự động hiển thị hơn vì tự động dường như đi kèm với thanh cuộn ...


0

Các trình duyệt hiện đại hỗ trợ đơn vị "chiều cao khung nhìn". Điều này sẽ mở rộng div đến chiều cao khung nhìn có sẵn. Tôi thấy nó đáng tin cậy hơn bất kỳ phương pháp nào khác.

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

0

Thậm chí bạn có thể làm như thế này

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

Điều này sẽ bao gồm mỗi div động của bạn theo nội dung. Giả sử nếu bạn có một div chung với lớp, nó sẽ tăng chiều cao của mỗi div động theo nội dung


0

Bạn cũng có thể dùng

 display: inline-block;

của tôi đã làm việc với điều này


0

TỔNG QUAN KHÔNG CÓ VỊ TRÍ: CỐ ĐỊNH

Một cách thực sự thú vị mà tôi đã tìm ra điều này cho một thực đơn gần đây là đặt cơ thể thành:

position: relative

và thiết lập lớp bao bọc của bạn như thế này:

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

Điều này có nghĩa là bạn không phải đặt vị trí cố định và vẫn có thể cho phép cuộn. Tôi đã sử dụng điều này cho lớp phủ thực đơn lớn.


0

sử dụng flex

.parent{
    display: flex
}

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

0

Ok, tôi đã thử một cái gì đó như thế này:

cơ thể (bình thường)

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

Đây không phải là cách chính xác để viết nó, nhưng nếu bạn tạo màn hình div chính dưới dạng bảng, nó sẽ mở rộng và sau đó tôi triển khai các thanh cuộn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.