ทำให้เนื้อหามีความสูงของเบราว์เซอร์ 100%


844

ฉันต้องการทำให้ร่างกายมีความสูงของเบราว์เซอร์ 100% ฉันสามารถใช้ CSS ได้ไหม

ฉันลองตั้งค่าheight: 100%แล้ว แต่ใช้งานไม่ได้

ฉันต้องการตั้งค่าสีพื้นหลังสำหรับหน้าให้เต็มทั้งหน้าต่างเบราว์เซอร์ แต่ถ้าหน้ามีเนื้อหาน้อยฉันจะได้แถบสีขาวน่าเกลียดที่ด้านล่าง


คำตอบ:


1090

ลองตั้งค่าความสูงขององค์ประกอบ html เป็น 100% เช่นกัน

html, 
body {
    height: 100%;
}

Body มองไปที่พาเรนต์ (HTML) สำหรับวิธีการขยายขนาดคุณสมบัติแบบไดนามิกดังนั้นองค์ประกอบ HTML จำเป็นต้องมีการตั้งค่าความสูงเช่นกัน

อย่างไรก็ตามเนื้อหาของร่างกายอาจจะต้องเปลี่ยนแบบไดนามิก การตั้งค่าความสูงขั้นต่ำเป็น 100% จะทำให้บรรลุเป้าหมายนี้

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

6
ขอบคุณดูเหมือนจะลบแถบสีขาวในหน้าสั้น ๆ แต่ตอนนี้บนหน้าเว็บที่ความสูงเกินความสูงของหน้าต่างเบราว์เซอร์ฉันได้รับแถบสีขาวขนาด 20px ที่ด้านล่าง: |
bodyofheat

48
ตกลงฉันพบ! มันใช้งานได้ถ้าฉันเพิ่ม html, body {min-height: 100%;}: D
bodyofheat

12
หมายเหตุ: หากคุณใช้body {min-height}เวอร์ชันคุณจะไม่สามารถใช้.body-child{height: 100%}เคล็ดลับได้
Salman

14
คำตอบที่ดีที่สุดคือด้วย CSS3, ใช้vh-> body { height: 100vh }- ตรวจสอบคำตอบที่นี่stackoverflow.com/a/25829844/2680216
Adriano Resende

2
@bFunc ฉันมีปัญหาเกี่ยวกับ chrome นี้ html {height: 100%;} body {height: auto} ทำงาน
GBMan

217

เป็นอีกทางเลือกหนึ่งในการตั้งค่าทั้งความสูงhtmlและbodyองค์ประกอบของ100%คุณสามารถใช้ความยาววิวพอร์ต - เปอร์เซ็นต์

5.1.2 ความยาวเปอร์เซ็นต์ของวิวพอร์ต: หน่วย 'vw', 'vh', 'vmin', 'vmax'

ความยาวร้อยละ viewport มีความสัมพันธ์กับขนาดของบล็อกเริ่มต้นที่มี เมื่อความสูงหรือความกว้างของบล็อกเริ่มต้นที่มีการเปลี่ยนแปลงพวกเขาจะถูกปรับตาม

ในตัวอย่างนี้คุณสามารถใช้ค่า100vh- ซึ่งเป็นความสูงของวิวพอร์ต

ตัวอย่างที่นี่

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

นี้ได้รับการสนับสนุนในเบราว์เซอร์ที่ทันสมัยที่สุด - การสนับสนุนสามารถพบได้ที่นี่


4
นอกจากความจริงที่ว่านี่เป็นเรื่องง่ายตายแล้วมันก็เป็นเรื่องดีที่เราจะนำแนวทางปฏิบัติใหม่มาใช้
Pan Wangperawong

3
@ Niaster ฉันเห็นด้วยอย่างแน่นอน สนับสนุนเบราว์เซอร์ได้รับการปรับปรุงแล้วตั้งแต่ผมโพสต์คำตอบนี้เช่นกัน :)
จอช Crozier

1
@ ดำเนินการใช่แล้ว .. แย่เกินไปไม่ใช่ :) ดูเหมือนว่าครั้งสุดท้ายที่ OP ออนไลน์ใน 7/11/11 (วันที่ถามคำถาม .. ) ดังนั้นฉันสงสัยว่าจะเปลี่ยน
Josh Crozier

18
ไม่แน่ใจว่าทำไมเราต้องเริ่มต้น "การใช้แนวทางปฏิบัติใหม่" เมื่อการฝึกฝนแบบเก่าทำงานได้ดี ไม่มีข้อได้เปรียบในการทำเช่นนี้: รหัสไม่เล็กลงหรือไม่ทำงานได้ดีขึ้นและยังมีเบราว์เซอร์ที่ไม่รองรับ vw / vh
cimmanon

3
สไตล์ชีทตัวแทนผู้ใช้ Chrome เพิ่มระยะขอบ 8px ให้กับร่างกายตามค่าเริ่มต้น (ไม่แน่ใจเกี่ยวกับเบราว์เซอร์อื่น) ดังนั้นฉันต้องเพิ่มmargin: 0;เพื่อหลีกเลี่ยงแถบเลื่อนแนวตั้งแบบถาวรทางด้านขวา
Andy Raddatz

121

หากคุณมีภาพพื้นหลังคุณจะต้องตั้งค่านี้แทน:

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

สิ่งนี้ทำให้มั่นใจได้ว่าแท็กร่างกายของคุณได้รับอนุญาตให้เติบโตอย่างต่อเนื่องเมื่อเนื้อหาสูงกว่าวิวพอร์ตและภาพพื้นหลังยังคงทำซ้ำ / เลื่อน / อะไรก็ตามเมื่อคุณเริ่มเลื่อนลง

โปรดจำไว้ว่าถ้าคุณต้องรองรับ IE6 คุณจะต้องหาวิธีที่จะเข้าสู่height:100%ร่างกายได้ IE6 ปฏิบัติheightเช่นmin-heightนั้น


ทำงานได้เช่นกันเมื่อมี flexbox ทั่วโลกอยู่ใต้ลำตัว (body> # flexbox-wrapper)
justnorris

2
นี่คือคำตอบที่ถูกต้องเนื่องจากคำตอบที่ยอมรับจะไม่เติบโตเมื่อเนื้อหายาวกว่าหน้าจอเดียว
SimplGy

ขอบคุณมาก Dan Dan พื้นที่สีขาวที่น่าเกลียดที่ด้านล่างของเว็บไซต์ของฉันหายไปแล้ว!
Boris Burkov

แน่นอนเนื่องจากคำถามนี้ถูกวางไว้มุมมองมิติของพอร์ตกลายเป็นสิ่ง ตอนนี้คุณสามารถทำได้body{min-height: 100vh}
Angry Dan

คุณต้องมีbody { height: auto; }แถบเลื่อนเพื่อไม่ให้แสดงใน FireFox นอกเหนือจากนั้นทำงานได้อย่างสมบูรณ์แบบ
Torxed

82

หากคุณต้องการรักษาระยะขอบของร่างกายและไม่ต้องการแถบเลื่อนให้ใช้ css ต่อไปนี้:

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

การตั้งค่า body {min-height:100%} จะให้แถบเลื่อน

ดูการสาธิตได้ที่http://jsbin.com/aCaDahEK/2/edit?html,output


7
ขอบคุณสำหรับคำตอบการทำงานเท่านั้น :) ฉันถือว่า 'สัมบูรณ์' ทำให้มันทำงานได้
Dmitry Matveev

ทำงานได้ดีสำหรับฉันใน Firefox โดยไม่มีแถบเลื่อนขอบคุณ คำตอบที่ยอมรับไม่ได้
Andrew

@Andrew ผิดปกติพอนี้จะให้แถบเลื่อนใน FireFox สิ่งที่คุณต้องการ แต่สำหรับคำตอบที่ยอมรับนั้นอยู่height: auto;ในbodyข้อเช่นกันเพื่อให้แถบเลื่อนปรากฏขึ้น
Torxed

@ Torxed ฉันยังได้รับแถบเลื่อนใน FireFox ด้วยเช่นกัน การเพิ่มการตั้งค่าอัตโนมัติเป็นความสูงดูเหมือนจะไม่เหมาะกับฉัน :(
Travis Crum

สิ่งนี้ใช้ไม่ได้กับฉันใน Chrome 56.0.2924.87 (64-bit)
Ryan


24

หลังจากทดสอบสถานการณ์ต่าง ๆ ฉันเชื่อว่านี่เป็นทางออกที่ดีที่สุด:

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

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

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

เป็นแบบไดนามิกในที่htmlและbodyองค์ประกอบจะขยายโดยอัตโนมัติหากเนื้อหาล้น ฉันทดสอบสิ่งนี้ใน Firefox เวอร์ชันล่าสุด, Chrome และ IE 11

ดูซอเต็มรูปแบบที่นี่ (สำหรับคุณที่เกลียดชังที่โต๊ะคุณสามารถเปลี่ยนให้ใช้ div ได้เสมอ):

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


กับที่ถูกกล่าวว่ามีหลายประเด็นที่มีคำตอบที่โพสต์ที่นี่

html, body {
    height: 100%;
}

การใช้ CSS ด้านบนจะทำให้ html และองค์ประกอบร่างกายไม่ขยายโดยอัตโนมัติหากเนื้อหาล้นตามที่แสดงที่นี่:

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

ในขณะที่คุณเลื่อนสังเกตพื้นหลังซ้ำ สิ่งนี้เกิดขึ้นเนื่องจากความสูงขององค์ประกอบร่างกายไม่ได้เพิ่มขึ้นเนื่องจากโต๊ะลูกล้น เหตุใดมันจึงไม่ขยายเหมือนองค์ประกอบบล็อกอื่น ๆ ฉันไม่แน่ใจ. ฉันคิดว่าเบราว์เซอร์จัดการกับสิ่งนี้ไม่ถูกต้อง

html {
    height: 100%;
}

body {
    min-height: 100%;
}

การตั้งค่าความสูงขั้นต่ำ 100% บนร่างกายดังที่แสดงไว้ด้านบนทำให้เกิดปัญหาอื่น หากคุณทำเช่นนี้คุณไม่สามารถระบุได้ว่าลูก div หรือตารางนั้นมีเปอร์เซ็นต์ความสูงตามที่แสดงที่นี่:

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

หวังว่านี่จะช่วยใครซักคน ฉันคิดว่าเบราว์เซอร์จัดการสิ่งนี้ไม่ถูกต้อง ฉันคาดหวังความสูงของร่างกายเพื่อปรับการเติบโตที่ใหญ่ขึ้นโดยอัตโนมัติหากลูกของมันล้น อย่างไรก็ตามดูเหมือนว่าจะไม่เกิดขึ้นเมื่อคุณใช้ความสูง 100% และความกว้าง 100%


3
ฉันลองคำตอบที่ได้รับคะแนนสูงทั้งหมดในหน้านี้ แต่ไม่ได้ผล อันนี้ทำ!
Ryan

คำตอบนี้ควรเป็นคำตอบที่ยอมรับได้ height: 100vhไม่ได้เป็นวิธีการแก้ปัญหาค่า ตั้งค่าคอนเทนเนอร์บนสุดของคุณให้100vhสูงและ100vwอาจทำให้เกิดปัญหาหากคอนเทนเนอร์มีแถบเลื่อน - จากนั้นจะใหญ่กว่าที่ควรจะเป็น (และอาจทำให้แถบเลื่อนปรากฏให้เห็นโดยไม่จำเป็น) height: 100vhยังก่อให้เกิดปัญหาสำหรับเราในอุปกรณ์รุ่นใหม่ของ Android (เช่น Xiaomi Mi 9 กับ Android 9) ที่ภาชนะที่จะมีขนาดใหญ่กว่าหน้าจอของตัวเองและจะทำให้แถบเลื่อนแนวตั้งที่ไม่จำเป็นต่อร่างกายเอกสาร
jtompl

21

สิ่งที่ฉันใช้เมื่อเริ่มต้นทุกไฟล์ CSS ที่ฉันใช้มีดังต่อไปนี้:

html, body{
    margin: 0;

    padding: 0;

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

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

ระยะห่างของ 0 ช่วยให้แน่ใจว่าองค์ประกอบ HTML และ BODY ไม่ได้ถูกจัดตำแหน่งอัตโนมัติโดยเบราว์เซอร์เพื่อให้มีพื้นที่บางส่วนทางซ้ายหรือขวาของพวกเขา

การเติมเต็มของ 0 ช่วยให้มั่นใจได้ว่าองค์ประกอบ HTML และ BODY จะไม่ผลักทุกอย่างที่อยู่ข้างในหรือล่างโดยอัตโนมัติเนื่องจากค่าเริ่มต้นของเบราว์เซอร์

ตัวแปรความกว้างและความสูงได้รับการตั้งค่าเป็น 100% เพื่อให้แน่ใจว่าเบราว์เซอร์ไม่ได้ปรับขนาดตามความคาดหมายของการมีมาร์จิ้นอัตโนมัติหรือแพ็ดดิงอัตโนมัติโดยมีการตั้งค่าขั้นต่ำและสูงสุดในกรณีที่ อาจไม่ต้องการพวกเขา

วิธีการแก้ปัญหานี้ก็หมายความว่าเหมือนที่ฉันทำเมื่อฉันเริ่มใช้ HTML และ CSS เป็นครั้งแรกเมื่อหลายปีก่อนคุณไม่จำเป็นต้องให้<div>a ก่อนmargin:-8px;เพื่อให้พอดีกับมุมหน้าต่างเบราว์เซอร์


ก่อนที่ฉันจะโพสต์ฉันดูโครงการ CSS แบบเต็มหน้าจออื่น ๆ ของฉันและพบว่าทั้งหมดที่ฉันใช้มีเพียงbody{margin:0;}และไม่มีอะไรอื่นอีกเลยที่ทำงานได้ดีใน 2 ปีที่ฉันทำงานอยู่

หวังว่าคำตอบโดยละเอียดนี้จะช่วยได้และฉันรู้สึกถึงความเจ็บปวดของคุณ ในสายตาของฉันมันเป็นใบ้ว่าเบราว์เซอร์ควรตั้งขอบเขตที่มองไม่เห็นทางด้านซ้ายและบางครั้งด้านบนขององค์ประกอบร่างกาย / html


คุณช่วยอธิบายได้มั้ยจุดประสงค์ที่เป็นไปได้width: 100%สำหรับองค์ประกอบของร่างกายและ html คืออะไร ใช่ฉันเข้าใจว่าbody { margin: 0; }ในกรณีส่วนใหญ่ควรจะเพียงพอ ฉันต้องการที่จะเข้าใจอย่างละเอียดมากขึ้น
john cj

21

การปรับปรุงอย่างรวดเร็ว

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

ทางออกที่ดีกว่าด้วย CSS วันนี้

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

2
ข้อเสนอนี้แตกต่างจากคำตอบที่มีอยู่อย่างไร
cimmanon

3
ฉันได้ลองผู้อื่นด้วย แต่ไม่ได้ผลสำหรับฉัน อันนี้ใช้ได้ผลก็สามารถเป็นทางออกให้กับคนที่ขัดสนได้ @cimmanon
Jayant Varshney

ฉันต้องบอกว่าอันนี้ใช้ได้กับฉันนอกเหนือจากคำตอบโหวตที่สูงอื่น ๆ overflow: autoที่นี่ทำเวทย์มนตร์ Btw ฉันใช้ Chrome
SkuraZZ

ตัวเลือกเท่านั้น (ฉันพบ) ซึ่งอนุญาตให้เนื้อหาที่มีขนาดล้นไหลปรับขนาดความสูงได้
Daniel Sharp


4

คุณสามารถใช้ JS ได้ถ้าต้องการ

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

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

แต่สำหรับสิ่งนี้คุณต้องเพิ่มสิ่งต่างๆมากกว่าที่ต้องการเช่นไลบรารี jQuery และการเขียนใน JavaScript ในขณะที่สามารถทำได้ใน CSS
ผู้พัฒนา Front-end

3

ลอง

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

2
คุณช่วยอธิบายได้มั้ยจุดประสงค์ที่เป็นไปได้width: 100%สำหรับองค์ประกอบของร่างกายและ html คืออะไร ใช่ฉันเข้าใจว่าbody { margin: 0; }ในกรณีส่วนใหญ่ควรจะเพียงพอ ฉันต้องการที่จะเข้าใจอย่างละเอียดมากขึ้น
john cj

3

โปรดตรวจสอบสิ่งนี้:

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

หรือลองวิธีการใหม่ความสูงวิวพอร์ต:

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

วิวพอร์ต: หากคุณใช้วิวพอร์ตหมายความว่าเนื้อหาของหน้าจอขนาดใดก็ตาม


โปรดระบุคำอธิบายโซลูชันของคุณเพื่อให้ผู้อื่นที่พบคำตอบนี้สามารถเข้าใจได้ ขอบคุณ!
Shawn

คุณช่วยอธิบายได้มั้ยจุดประสงค์ที่เป็นไปได้width: 100%สำหรับองค์ประกอบของร่างกายและ html คืออะไร
john cj

ดังนั้นสมมติว่าฉันมีตารางที่มี 50 คอลัมน์และ 1,000 แถวที่มีตัวเลขระหว่าง 1,000 ถึง 9999 สิ่งที่จะเกิดขึ้นกับพวกเขาพวกเขาจะเลื่อนเกินหน้าต่างเหมือนที่เราทำตามปกติหรือพวกเขาจะมีแถบเลื่อนประเภทล้น
PirateApp

3

หากคุณไม่ต้องการให้งานแก้ไขไฟล์ CSS ของคุณเองและกำหนดกฎความสูงด้วยตัวเองเฟรมเวิร์ก CSS ทั่วไปส่วนใหญ่จะแก้ปัญหานี้ด้วยองค์ประกอบร่างกายที่เติมเต็มทั้งหน้าของหน้าท่ามกลางปัญหาอื่น ๆ ขนาดของวิวพอร์ต

ตัวอย่างเช่นกรอบงานของTacit CSS แก้ปัญหานี้ได้โดยไม่จำเป็นต้องกำหนดกฎและคลาส CSS ใด ๆ และคุณเพียงรวมไฟล์ CSS ใน HTML ของคุณ


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%
}

ใช้งานได้กับเบราว์เซอร์หลักทั้งหมด: FF, Chrome, Opera, IE9 + ทำงานร่วมกับภาพพื้นหลังและการไล่ระดับสี แถบเลื่อนมีให้บริการตามความต้องการของเนื้อหา


2

ฉันจะใช้สิ่งนี้

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

เบราว์เซอร์จะใช้งานmin-height: 100vhและหากเบราว์เซอร์นั้นเก่าไปสักหน่อยmin-height: 100%จะเป็นทางเลือก

overflow: autoจำเป็นถ้าคุณต้องการให้ร่างกายและ HTML เพื่อขยายความสูงของพวกเขาเมื่อคุณปรับขนาดหน้าจอ (ขนาดมือถือสำหรับตัวอย่าง)



1

คำตอบทั้งหมดถูกต้อง 100% และอธิบายได้ดี แต่ฉันทำสิ่งที่ดีและง่ายมากที่จะตอบสนอง

ที่นี่องค์ประกอบจะใช้ความสูง 100% ของพอร์ตมุมมอง แต่เมื่อพูดถึงมุมมองมือถือจะไม่ได้ดูดีเป็นพิเศษในมุมมองแนวตั้ง (มือถือ) ดังนั้นเมื่อพอร์ตมุมมองที่เล็กลงองค์ประกอบจะยุบและทับซ้อนกัน ดังนั้นเพื่อให้ตอบสนองเพียงเล็กน้อยนี่คือรหัส หวังว่าใครบางคนจะได้รับความช่วยเหลือจากสิ่งนี้

<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>

นี่คือการสาธิต JSfiddle



-1

เกี่ยวกับพื้นที่พิเศษที่ด้านล่าง: หน้าของคุณเป็นแอปพลิเคชัน ASP.NET หรือไม่ ถ้าเป็นเช่นนั้นอาจมีการห่อทุกอย่างในมาร์กอัปของคุณ อย่าลืมใส่สไตล์ในแบบฟอร์มด้วย การเพิ่มoverflow:hidden;แบบฟอร์มอาจลบพื้นที่พิเศษที่ด้านล่าง


6
ฉันไม่แนะนำให้ใช้โอเวอร์โฟลว์: ซ่อนอยู่เว้นแต่คุณจะมีเหตุผลที่ดีจริงๆ ค้นหาสาเหตุที่ทำให้สิ่งต่าง ๆ ล้นและปรับเปลี่ยนดังนั้นมันจะไม่ล้นแทน
jontro

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

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

คุณช่วยอธิบายได้มั้ยจุดประสงค์ที่เป็นไปได้width: 100%สำหรับองค์ประกอบของร่างกายและ html คืออะไร ใช่ฉันเข้าใจว่าbody { margin: 0; }ในกรณีส่วนใหญ่ควรจะเพียงพอ ฉันต้องการที่จะเข้าใจอย่างละเอียดมากขึ้น
john cj

-5

CSS3 มีวิธีการใหม่

 height:100vh

มันทำให้ ViewPort 100% เท่ากับความสูง

ดังนั้นรหัสของคุณควรเป็น

 body{
 height:100vh; 
 }

5
สิ่งนี้แตกต่างจากคำตอบที่ฉันโพสต์เมื่อปีที่แล้วในเดือนกันยายนอย่างไร
Josh Crozier

1
ทำไมคุณถึงตอบซ้ำ
Adriano Resende
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.