Làm cho cơ thể có 100% chiều cao trình duyệt


844

Tôi muốn làm cho cơ thể có 100% chiều cao trình duyệt. Tôi có thể làm điều đó bằng CSS không?

Tôi đã thử cài đặt height: 100%, nhưng nó không hoạt động.

Tôi muốn đặt màu nền cho một trang để lấp đầy toàn bộ cửa sổ trình duyệt, nhưng nếu trang có ít nội dung, tôi sẽ nhận được một thanh màu trắng xấu xí ở phía dưới.


Câu trả lời:


1092

Hãy thử thiết lập chiều cao của phần tử html là 100%.

html, 
body {
    height: 100%;
}

Thân tìm đến cha mẹ của nó (HTML) để biết cách chia tỷ lệ thuộc tính động, vì vậy phần tử HTML cũng cần phải được đặt chiều cao.

Tuy nhiên, nội dung của cơ thể có thể sẽ cần phải thay đổi linh hoạt. Đặt chiều cao tối thiểu thành 100% sẽ hoàn thành mục tiêu này.

html {
  height: 100%;
}
body {
  min-height: 100%;
}

6
cảm ơn, điều này dường như loại bỏ thanh trắng trên các trang ngắn, nhưng bây giờ trên các trang có chiều cao vượt quá chiều cao cửa sổ trình duyệt, tôi nhận được một thanh trắng 20px ở dưới cùng: |
bodyofheat

48
ok tôi phát hiện ra nó hoạt động nếu tôi thêm html, body {min-height: 100%;}: D
bodyofheat

12
Lưu ý: nếu bạn sử dụng body {min-height}phiên bản thì bạn không thể sử dụng .body-child{height: 100%}thủ thuật.
Salman A

14
câu trả lời tốt nhất là với CSS3, sử dụng vh-> body { height: 100vh }- kiểm tra câu trả lời tại đây stackoverflow.com/a/25829844/2680216
Adriano Resende

2
@bFunc Tôi có vấn đề chrome này. html {height: 100%;} body {height: auto} thực hiện công việc.
GBMan

217

Thay thế cho việc đặt cả độ cao của phần tử htmlbodyphần tử thành 100%, bạn cũng có thể sử dụng độ dài phần trăm khung nhìn.

5.1.2. Độ dài phần trăm lượt xem: các đơn vị 'vw', 'vh', 'vmin', 'vmax'

Độ dài phần trăm khung nhìn liên quan đến kích thước của khối chứa ban đầu. Khi chiều cao hoặc chiều rộng của khối chứa ban đầu bị thay đổi, chúng được chia tỷ lệ tương ứng.

Trong trường hợp này, bạn có thể sử dụng giá trị 100vh- đó là chiều cao của chế độ xem.

Ví dụ ở đây

body {
  height: 100vh;
  padding: 0;
}
body {
  min-height: 100vh;
  padding: 0;
}

Điều này được hỗ trợ trong hầu hết các trình duyệt hiện đại - hỗ trợ có thể được tìm thấy ở đây .


4
Bên cạnh thực tế là điều này thật đơn giản, thật tốt khi chúng ta áp dụng các thực hành mới.
Pan Wangperawong

3
@niaster Mình nhất định đồng ý. Hỗ trợ trình duyệt đã được cải thiện kể từ khi tôi đăng câu trả lời này :)
Josh Crozier

1
@incarnate Vâng .. quá tệ phải không :) Có vẻ như lần cuối OP trực tuyến là vào ngày 7/11/11 (ngày câu hỏi được hỏi ..) Vì vậy, tôi nghi ngờ điều đó sẽ thay đổi.
Josh Crozier

18
Không chắc chắn tại sao chúng ta cần bắt đầu "áp dụng các thực hành mới" khi thực tiễn cũ hoạt động tốt. Không có lợi thế để làm điều này: mã không nhỏ hơn, cũng không hoạt động tốt hơn và vẫn còn các trình duyệt không hỗ trợ vw / vh.
cimmanon

3
Theo mặc định, biểu định kiểu tác nhân người dùng Chrome thêm lề 8px cho cơ thể (không chắc chắn về các trình duyệt khác), vì vậy tôi cũng phải thêm margin: 0;để tránh thanh cuộn dọc liên tục ở bên phải.
Andy Raddatz

121

Nếu bạn có một hình nền thì bạn sẽ muốn đặt cái này thay thế:

html{
  height: 100%;
}
body {
  min-height: 100%;
}

Điều này đảm bảo rằng thẻ cơ thể của bạn được phép tiếp tục phát triển khi nội dung cao hơn chế độ xem và hình ảnh nền tiếp tục lặp lại / cuộn / bất cứ điều gì khi bạn bắt đầu cuộn xuống.

Hãy nhớ rằng nếu bạn phải hỗ trợ IE6, bạn sẽ cần tìm cách nêm vào height:100%cơ thể, IE6 vẫn xử lý heightnhư thế min-heightnào.


Cũng hoạt động khi có một flexbox toàn cầu ngay dưới thân máy (body> # flexbox-Wrapper)
justnorris

2
Đây là câu trả lời đúng, vì câu trả lời được chấp nhận sẽ không phát triển vì nội dung dài hơn một màn hình.
SimplGy

Cảm ơn bạn rất nhiều, Angry Dan, khoảng trắng xấu xí ở cuối trang web của tôi đã biến mất!
Boris Burkov

Tất nhiên, vì câu hỏi này đã được đặt ra, nên xem kích thước dựa trên cổng đã trở thành một điều. Vì vậy, bây giờ bạn chỉ có thể làmbody{min-height: 100vh}
Angry Dan

Bạn cũng cần body { height: auto; }cho các thanh cuộn không được hiển thị trong FireFox. ngoài ra, hoạt động hoàn hảo.
Torxed

82

Nếu bạn muốn giữ lề trên thân máy và không muốn thanh cuộn, hãy sử dụng css sau:

html { height:100%; }
body { position:absolute; top:0; bottom:0; right:0; left:0; }

Cài đặt body {min-height:100%} sẽ cung cấp cho bạn thanh cuộn.

Xem bản demo tại http://jsbin.com/aCaDahEK/2/edit?html,output .


7
Cảm ơn bạn vì câu trả lời duy nhất đang hoạt động :) Tôi cho rằng 'tuyệt đối' đã khiến nó hoạt động
Dmitry Matveev

Hoạt động tốt cho tôi trong Firefox mà không cần thanh cuộn, cảm ơn bạn. Câu trả lời được chấp nhận không.
Andrew

@Andrew Thật kỳ lạ, điều này mang lại cho các thanh cuộn trong FireFox. Tuy nhiên, những gì bạn cần cho câu trả lời được chấp nhận là height: auto;trong bodymệnh đề cũng như cho các thanh cuộn bây giờ bật lên.
Torxed

@Torxed Tôi vẫn nhận được thanh cuộn trong FireFox. Thêm cài đặt tự động vào chiều cao dường như không hiệu quả với tôi :(
Travis Crum

Điều này không hoạt động với tôi trong Chrome 56.0.2924.87 (64-bit).
Ryan


24

Sau khi thử nghiệm các kịch bản khác nhau, tôi tin rằng đây là giải pháp tốt nhất:

html {
    width: 100%;
    height: 100%;
    display: table;
}

body {
    width: 100%;
    display: table-cell;
}

html, body {
    margin: 0px;
    padding: 0px;
}

Đó là động ở chỗ htmlvà các bodyyếu tố sẽ tự động mở rộng nếu nội dung của chúng tràn ra. Tôi đã thử nghiệm điều này trong phiên bản Firefox, Chrome và IE 11 mới nhất.

Xem toàn bộ câu đố ở đây (đối với những người ghét bảng ngoài kia, bạn luôn có thể thay đổi nó để sử dụng div):

https://jsfiddle.net/71yp4rh1/9/


Với điều đó đang được nói, có một số vấn đề với câu trả lời được đăng ở đây .

html, body {
    height: 100%;
}

Sử dụng CSS ở trên sẽ khiến html và phần tử body KHÔNG tự động mở rộng nếu nội dung của chúng bị tràn như hiển thị ở đây:

https://jsfiddle.net/9vyy620m/4/

Khi bạn cuộn, chú ý nền lặp lại? Điều này xảy ra vì chiều cao của phần tử cơ thể KHÔNG tăng do bảng con của nó bị tràn. Tại sao nó không mở rộng như bất kỳ yếu tố khối nào khác? Tôi không chắc. Tôi nghĩ rằng các trình duyệt xử lý điều này không chính xác.

html {
    height: 100%;
}

body {
    min-height: 100%;
}

Đặt chiều cao tối thiểu 100% trên cơ thể như hình trên gây ra các vấn đề khác. Nếu bạn làm điều này, bạn không thể chỉ định rằng một div con hoặc bảng chiếm một phần trăm chiều cao như được hiển thị ở đây:

https://jsfiddle.net/aq74v2v7/4/

Hy vọng điều này sẽ giúp được ai đó. Tôi nghĩ rằng các trình duyệt đang xử lý điều này không chính xác. Tôi hy vọng chiều cao của cơ thể sẽ tự động điều chỉnh ngày càng lớn hơn nếu trẻ em của nó tràn ra. Tuy nhiên, điều đó dường như không xảy ra khi bạn sử dụng 100% chiều cao và 100% chiều rộng.


3
Tôi đã thử tất cả các câu trả lời được bình chọn cao trên trang này, nhưng không có câu trả lời nào hiệu quả. Cái này đã làm!
Ryan

Câu trả lời này nên được chấp nhận. Đây height: 100vhkhông phải là một giải pháp. Đặt bộ chứa trên cùng của bạn 100vhở mức cao và 100vwcó thể gây ra sự cố nếu bộ chứa có thanh cuộn - thì nó sẽ lớn hơn mức cần thiết (và có thể khiến thanh cuộn hiển thị không cần thiết). Điều này height: 100vhcũng gây ra sự cố cho chúng tôi trên các thiết bị Android mới hơn (ví dụ: Xiaomi Mi 9 với Android 9), trong đó hộp chứa sẽ lớn hơn màn hình và sẽ tạo thanh cuộn dọc không cần thiết cho thân tài liệu.
jtompl

21

Những gì tôi sử dụng khi bắt đầu nghĩa đen của mọi tệp CSS tôi sử dụng là như sau:

html, body{
    margin: 0;

    padding: 0;

    min-width: 100%;
    width: 100%;
    max-width: 100%;

    min-height: 100%;
    height: 100%;
    max-height: 100%;
}

Biên độ 0 đảm bảo rằng các thành phần HTML và BODY không được trình duyệt tự động định vị để có một khoảng trống ở bên trái hoặc bên phải của chúng.

Phần đệm bằng 0 đảm bảo rằng các phần tử HTML và BODY không tự động đẩy mọi thứ bên trong chúng xuống hoặc bên phải do mặc định của trình duyệt.

Các biến thể chiều rộng và chiều cao được đặt thành 100% để đảm bảo rằng trình duyệt không thay đổi kích thước chúng theo dự đoán thực sự có lề hoặc phần đệm tự động, với min và max được đặt trong trường hợp một số thứ lạ, không thể giải thích được xảy ra, mặc dù bạn có lẽ không cần chúng

Giải pháp này cũng có nghĩa là, như tôi đã làm khi tôi lần đầu tiên bắt đầu vào HTML và CSS cách đây vài năm, bạn sẽ không phải từ bỏ đầu tiên bạn <div>một margin:-8px;để làm cho nó phù hợp ở góc của cửa sổ trình duyệt.


Trước khi tôi đăng, tôi đã xem xét dự án CSS toàn màn hình khác của tôi và thấy rằng tất cả những gì tôi sử dụng chỉ là body{margin:0;}và không có gì khác, nó đã hoạt động tốt trong 2 năm tôi đã làm việc với nó.

Hy vọng câu trả lời chi tiết này sẽ giúp ích, và tôi cảm thấy nỗi đau của bạn. Trong mắt tôi, thật ngu ngốc khi các trình duyệt nên đặt một ranh giới vô hình ở bên trái và đôi khi là phía trên cùng của các phần tử body / html.


Bạn có thể giải thích, mục đích có thể của width: 100%các yếu tố cơ thể và html là gì? Vâng, tôi hiểu rằng, từ quan điểm thực tế, body { margin: 0; }nên là đủ trong hầu hết các trường hợp. Tôi chỉ muốn hiểu kỹ hơn.
john cj

21

Cập nhật nhanh

html, body{
    min-height:100%;
    overflow:auto;
}

Một giải pháp tốt hơn với CSS ngày nay

html, body{ 
  min-height: 100vh;
  overflow: auto;
}

2
Làm thế nào điều này cung cấp bất cứ điều gì khác nhau so với các câu trả lời hiện có?
cimmanon

3
Tôi cũng đã thử người khác, nhưng không làm việc cho tôi. Điều này đã làm việc, vì vậy nó có thể là một giải pháp cho một người cần thiết. @cimmanon
Jayant Varshney

Tôi phải nói rằng cái này hiệu quả với tôi ngoài những câu trả lời bầu chọn cao khác. overflow: autoở đây làm phép thuật. Btw tôi sử dụng Chrome.
SkuraZZ

Chỉ có tùy chọn (tôi đã tìm thấy) cho phép tràn nội dung để thay đổi kích thước chiều cao.
Daniel Sharp

6

Đây:

html,body{
    height:100%;
}

body{
  margin:0;
  padding:0
  background:blue;
}

4

Bạn cũng có thể sử dụng JS nếu cần

var winHeight = window.innerHeight    || 
document.documentElement.clientHeight || 
document.body.clientHeight;

var pageHeight = $('body').height();
if (pageHeight < winHeight) {
    $('.main-content,').css('min-height',winHeight)
}

Nhưng để làm điều này, bạn cần thêm nhiều thứ hơn mức cần thiết như thư viện jQuery và viết bằng JavaScript trong khi điều này có thể được thực hiện bằng CSS.
Nhà phát triển Front-end

3

Thử

<html style="width:100%; height:100%; margin: 0; padding: 0;">
<body style="overflow:hidden; width:100%; height:100%; margin:0; padding:0;">

2
Bạn có thể giải thích, mục đích có thể của width: 100%các yếu tố cơ thể và html là gì? Vâng, tôi hiểu rằng, từ quan điểm thực tế, body { margin: 0; }nên là đủ trong hầu hết các trường hợp. Tôi chỉ muốn hiểu kỹ hơn.
john cj

3

Làm ơn kiểm tra cái này:

* {margin: 0; padding: 0;}    
html, body { width: 100%; height: 100%;}

Hoặc thử phương pháp mới Chiều cao khung nhìn:

html, body { width: 100vw; height: 100vh;}

Chế độ xem: Nếu việc sử dụng chế độ xem của bạn có nghĩa là bất kỳ kích thước màn hình nào cũng sẽ có chiều cao đầy đủ cho màn hình.


Vui lòng bao gồm một lời giải thích về giải pháp của bạn để những người khác tìm thấy câu trả lời này có thể hiểu. Cảm ơn!
Shawn

Bạn có thể giải thích, mục đích có thể của width: 100%các yếu tố cơ thể và html là gì?
john cj

vì vậy, giả sử tôi có một bảng có 50 cột và 1000 hàng có số từ 1000 đến 9999, điều gì sẽ xảy ra với chúng, chúng sẽ di chuyển ra ngoài cửa sổ như chúng ta thường làm hay chúng sẽ có một thanh cuộn kiểu tràn
PirateApp

3

Nếu bạn không muốn tự mình chỉnh sửa tệp CSS của mình và tự xác định quy tắc chiều cao, các khung CSS điển hình nhất cũng giải quyết vấn đề này với phần tử cơ thể lấp đầy toàn bộ trang, trong số các vấn đề khác, dễ dàng với nhiều vấn đề kích thước của khung nhìn.

Ví dụ, khung CSS Tacit giải quyết vấn đề này ngay lập tức, trong đó bạn không cần xác định bất kỳ quy tắc và lớp CSS nào và bạn chỉ cần bao gồm tệp CSS trong HTML của mình.


2
html {
    background: url(images/bg.jpg) no-repeat center center fixed; 
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    min-height: 100%;
}
html body {
    min-height: 100%
}

Hoạt động cho tất cả các trình duyệt chính: FF, Chrome, Opera, IE9 +. Hoạt động với hình ảnh nền và độ dốc. Thanh cuộn có sẵn như là nhu cầu nội dung.


2

Tôi sẽ sử dụng cái này

html, body{
      background: #E73;
      min-height: 100%;
      min-height: 100vh;
      overflow: auto; // <- this is needed when you resize the screen
    }
<html>
    <body>
    </body>
</html>

Trình duyệt sẽ sử dụng min-height: 100vhvà nếu bằng cách nào đó trình duyệt cũ hơn một chút thì đó min-height: 100%sẽ là dự phòng.

Điều overflow: autonày là cần thiết nếu bạn muốn phần thân và html mở rộng chiều cao của chúng khi bạn thay đổi kích thước màn hình (ví dụ như kích thước di động)



1

tất cả các câu trả lời đều đúng 100% và được giải thích rõ ràng, nhưng tôi đã làm một cái gì đó tốt và rất đơn giản để làm cho nó phản hồi.

Ở đây, phần tử sẽ chiếm 100% chiều cao của cổng xem nhưng khi xem ở chế độ xem trên thiết bị di động, nó trông không được tốt lắm, đặc biệt là ở chế độ xem dọc (di động), do đó, khi cổng xem nhỏ hơn, các phần tử sẽ sụp đổ và chồng chéo lên nhau. Vì vậy, để làm cho nó ít đáp ứng ở đây là mã. hy vọng ai đó sẽ nhận được sự giúp đỡ từ điều này.

<style>
.img_wrap{
      width:100%;
      background: #777;
}
.img_wrap img{
      display: block;  
      width: 100px;
      height: 100px;
      padding: 50px 0px;
      margin: 0 auto;
}
.img_wrap img:nth-child(2){
      padding-top: 0;
}
</style>

<div class="img_wrap">
  <img src="https://i.pinimg.com/originals/71/84/fc/7184fc63db0516a00e7d86900d957925.jpg" alt="">
  <img src="https://i.pinimg.com/originals/71/84/fc/7184fc63db0516a00e7d86900d957925.jpg" alt="">
</div>

<script>
   var windowHeight = $(window).height();
   var elementHeight = $('.img_wrap').height();

   if( elementHeight > windowHeight ){
       $('.img_wrap').css({height:elementHeight});
   }else{
       $('.img_wrap').css({height:windowHeight});
   }
</script>

đây là bản demo của JSfiddle.


0

Cập nhật tại đây

html
  {
    height:100%;
  }

body{
     min-height: 100%;
     position:absolute;
     margin:0;
     padding:0; 
}

-1

Về không gian thừa ở phía dưới: trang của bạn có phải là ứng dụng ASP.NET không? Nếu vậy, có lẽ có một gói gần như tất cả mọi thứ trong đánh dấu của bạn. Đừng quên phong cách là tốt. Thêm overflow:hidden;vào biểu mẫu có thể loại bỏ không gian thừa ở phía dưới.


6
Tôi không khuyên bạn nên sử dụng overflow: hidden trừ khi bạn có lý do thực sự tốt. Tìm hiểu lý do tại sao mọi thứ tràn ra và điều chỉnh để thay vào đó nó sẽ không tràn ra
jontro

-1
@media all {
* {
    margin: 0;
    padding: 0;
}

html, body {
    width: 100%;
    height: 100%;
} }

Bạn có thể giải thích, mục đích có thể của width: 100%các yếu tố cơ thể và html là gì? Vâng, tôi hiểu rằng, từ quan điểm thực tế, body { margin: 0; }nên là đủ trong hầu hết các trường hợp. Tôi chỉ muốn hiểu kỹ hơn.
john cj

-5

CSS3 có một phương thức mới.

 height:100vh

Nó làm cho ViewPort 100% bằng chiều cao.

Vì vậy, Mã của bạn phải là

 body{
 height:100vh; 
 }

5
Làm thế nào khác với câu trả lời tôi đã đăng một năm trước vào tháng Chín?
Josh Crozier

1
tại sao bạn trả lời gấp đôi?
Adriano Resende
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.