วิธีทำให้ <div> เต็มหน้าจอตลอดเวลา


170

ไม่ว่าเนื้อหาจะเป็นอย่างไร

เป็นไปได้ที่จะทำเช่นนี้?


2
มีคำตอบที่ดีมากมายที่นี่ แต่ฉันไม่เห็นพูดถึง flexbox ดังนั้นฉันคิดว่าฉันจะแชร์ 2 เซ็นต์นี้: การมี div div 100% เป็นเรื่องหนึ่ง แต่ถ้าถึงเวลา และจัดเนื้อหาบางส่วนใน div นั้นคุณจะต้องดู flexbox css-tricks.com/snippets/css/a-guide-to-flexbox
ArleyM

คำตอบ:


146

สิ่งนี้ใช้ได้สำหรับฉันเสมอ:

<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
        html, body {
            height: 100%;
            margin: 0;
        }

        #wrapper {
            min-height: 100%; 
        }
    </style>
    <!--[if lte IE 6]>
    <style type="text/css">
        #container {
            height: 100%;
        }
    </style>
    <![endif]-->
</head>

<body>
    <div id="wrapper">some content</div>
</body>

นี่อาจเป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้ จำเป็นต้องตั้งค่าสี่คุณสมบัติ CSS (แม้ว่าหนึ่งในนั้นจะทำให้ IE มีความสุขเท่านั้น)


1
@AdamHarte ทำไมมันไม่ทำงานถ้าคุณลบตัวเลือก 'html' ออกจาก CSS? →ร่างกาย {ความสูง: 100%; กำไรขั้นต้น: 0; }
Alex Prut

2
@ P.Alex Math! หากความสูงแท็ก HTML ของคุณยืดให้พอดีกับเนื้อหาความสูงของเนื้อหาจะเป็น 100% ของพาเรนต์คุณจะไม่ถูกบังคับให้เป็น 100% ของพื้นที่ว่าง
Adam Harte

1
ฉันเพิ่งลองใช้ wpf โดยใช้ cefsharp chromium และมันใช้งานได้ดี :)
adminSoftDK

106

นี่คือทางออกของฉันในการสร้าง div แบบเต็มหน้าจอโดยใช้ CSS บริสุทธิ์ จะแสดง div แบบเต็มหน้าจอที่ยังคงอยู่ในการเลื่อน และถ้าเนื้อหาของหน้าพอดีกับหน้าจอหน้านั้นจะไม่แสดงแถบเลื่อน

ผ่านการทดสอบใน IE9 +, Firefox 13+, Chrome 21+

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <title> Fullscreen Div </title>
  <style>
  .overlay {
    position: fixed;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    background: rgba(51,51,51,0.7);
    z-index: 10;
  }
  </style>
</head>
<body>
  <div class='overlay'>Selectable text</div>
  <p> This paragraph is located below the overlay, and cannot be selected because of that :)</p>
</body>
</html>


58

นี่เป็นวิธีที่มีเสถียรภาพที่สุด (และง่าย) ในการทำและใช้งานได้กับเบราว์เซอร์สมัยใหม่ทั้งหมด

.fullscreen {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  overflow: auto;
  background: lime; /* Just to visualize the extent */
  
}
<div class="fullscreen">
  Suspendisse aliquam in ante a ornare. Pellentesque quis sapien sit amet dolor euismod congue. Donec non semper arcu. Sed tortor ante, cursus in dui vitae, interdum vestibulum massa. Suspendisse aliquam in ante a ornare. Pellentesque quis sapien sit amet dolor euismod congue. Donec non semper arcu. Sed tortor ante, cursus in dui vitae, interdum vestibulum massa. Suspendisse aliquam in ante a ornare. Pellentesque quis sapien sit amet dolor euismod congue. Donec non semper arcu. Sed tortor ante, cursus in dui vitae, interdum vestibulum massa. Suspendisse aliquam in ante a ornare. Pellentesque quis sapien sit amet dolor euismod congue. Donec non semper arcu. Sed tortor ante, cursus in dui vitae, interdum vestibulum massa.
</div>

ผ่านการทดสอบการทำงานใน Firefox, Chrome, Opera, Vivaldi, IE7 + (ขึ้นอยู่กับการจำลองใน IE11)


1
มันทำงานได้ดีกว่าถ้าคุณใช้ต่อไปและตอนนี้เป็นส่วนหนึ่งที่มีความแตกต่างกัน:position: fixed; top: 0; left: 0; width: 100%; height: 100%;ใช้งานได้จริงในเบราว์เซอร์รุ่นเก่าอย่างไม่มีที่ติเช่นกัน
Aart den Braber

1
ทำไมการใช้ความกว้างและความสูงจึงดีกว่าการใช้ด้านล่างและขวา หากคุณใช้ความกว้างและความสูงและต้องการเพิ่มช่องว่างและ / หรือเส้นbox-sizing: border-box;ขอบคุณต้องแน่ใจว่าคุณมีมิฉะนั้นคุณจะได้กล่องที่ใหญ่กว่าซึ่งจะทำให้การเลื่อน ดูนี่สิ
ความกลัว

31

วิธีที่ดีที่สุดที่จะทำเช่นนี้กับเบราว์เซอร์ที่ทันสมัยที่จะทำให้การใช้งานความยาว Viewport ร้อยละลดลงกลับไปที่ความยาวร้อยละปกติสำหรับเบราว์เซอร์ที่ไม่สนับสนุนหน่วยงานเหล่านั้น

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

สมมติว่า HTML ต่อไปนี้:

<body>
    <div></div>
</body>

คุณสามารถใช้สิ่งต่อไปนี้:

html, body, div {
    /* Height and width fallback for older browsers. */
    height: 100%;
    width: 100%;

    /* Set the height to match that of the viewport. */
    height: 100vh;

    /* Set the width to match that of the viewport. */
    width: 100vw;

    /* Remove any browser-default margins. */
    margin: 0;
}

นี่คือตัวอย่างของJSFiddleซึ่งแสดงdivองค์ประกอบที่เติมทั้งความสูงและความกว้างของเฟรมผลลัพธ์ หากคุณปรับขนาดกรอบผลลัพธ์divองค์ประกอบจะปรับขนาดตามนั้น


18

ฉันไม่มี IE Josh คุณช่วยทดสอบสิ่งนี้ให้ฉันได้ไหม ขอบคุณ

<html>
<head>
    <title>Hellomoto</title>
    <style text="text/javascript">
        .hellomoto
        {
            background-color:#ccc;
            position:absolute;
            top:0px;
            left:0px;
            width:100%;
            height:100%;
            overflow:auto;
        }
        body
        {
            background-color:#ff00ff;
            padding:0px;
            margin:0px;
            width:100%;
            height:100%;
            overflow:hidden;
        }
        .text
        {
            background-color:#cc00cc;
            height:800px;
            width:500px;
        }
    </style>
</head>
<body>
<div class="hellomoto">
    <div class="text">hellomoto</div>
</div>
</body>
</html>

คุณไม่จำเป็นต้องตั้งค่าความกว้างถึง 100%
อดัมฮาร์ท

ฉันไม่เข้าใจ คุณเข้ารหัสฮาร์ดไดรฟ์ที่ความสูง 800px บน DIV OP ต้องการให้สิ่งนี้เป็นแบบไดนามิก
Josh Stodola

โอ้ขออภัยไม่เห็นว่ามีด้อมอยู่ในนั้น (หรือบน / ซ้าย) ดีก็ปรับแล้ว :)
อดัมฮาร์ท

โปรดทราบว่าคุณอาจต้องการใช้position: fixedแทนหากหน้าสามารถเลื่อนได้ แต่โปรดทราบว่ามันไม่สามารถใช้งานได้ในเบราว์เซอร์มือถือบางรุ่นcaniuse.com/#feat=css-fixed
luiges90

1
ฉันได้ยินมาว่ามีวิธีการที่ทันสมัยกว่าในการแก้ปัญหานี้ @ Tubbe คุณรู้ว่าจริงหรือไม่
bzlm

8

สิ่งที่ผมพบว่าวิธีที่สง่างามที่ดีที่สุดคือเช่นต่อไปนี้เคล็ดลับมากที่สุดนี่คือการทำให้'sdivposition: fixed

.mask {
    background-color: rgba(0, 0, 0, 0.5);
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: 0;
    box-sizing: border-box;
    width: 100%;
    height: 100%;
    object-fit: contain;
}
<html>
  <head>
  <title>Test</title>
  </head>
  <body>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <h1>Whatever it takes</h1>
    <div class="mask"></div>
    </body>
  </html>

การสาธิตหน้ากาก



8

vhนี่คือวิธีการแก้ปัญหาที่สั้นที่สุดบนพื้นฐานของ โปรดทราบว่าvhจะไม่ได้รับการสนับสนุนในเบราว์เซอร์รุ่นเก่าบางรุ่น

CSS:

div {
    width: 100%;
    height: 100vh;
}

HTML:

<div>This div is fullscreen :)</div>

1
สะดวก แต่มีปัญหาในเบราว์เซอร์มือถือ: css-tricks.com/the-trick-to-viewport-units-on-mobile
Alexander Kim

ทำไมเรื่องซับซ้อน? สิ่งนี้จะทำงานบนเบราว์เซอร์มือถือ DuckDuckGo 5.54.0, Samsung Internet 11.2.1.3 และ Chrome 81.0.4044.138 เช่นเดียวกับบนเดสก์ท็อป Brave 1.10.97, Chrome 83.0.4103.116 และ Safari 12.1.2
Jakob

1

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

<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
        #container {
            position: absolute;
            width: 100%;
            min-height: 100%;
            left: 0;
            top: 0;
        }
    </style>
</head>

<body>
    <div id="container">some content</div>
</body>

-8

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

<!DOCTYPE html>

<html>
  <head>
    <title>Test by Josh</title>
    <style type="text/css">
      * { padding:0; margin:0; }
      #test { background:#aaa; height:100%; width:100%; }
    </style>
    <script type="text/javascript">
      window.onload = function() {
        var height = getViewportHeight();

        alert("This is what it looks like before the Javascript. Click OK to set the height.");

        if(height > 0)
          document.getElementById("test").style.height = height + "px";
      }

      function getViewportHeight() {
        var h = 0;

        if(self.innerHeight)
          h = window.innerHeight;
        else if(document.documentElement && document.documentElement.clientHeight)
          h = document.documentElement.clientHeight;
        else if(document.body) 
          h = document.body.clientHeight;

        return h;
      }
    </script>
  </head>
  <body>
    <div id="test">
      <h1>Test</h1>
    </div>
  </body>
</html>

1
หากคุณใช้ห้องสมุดเช่น jQuery (แนะนำ) การเพิ่มความสูงผ่าน$(window).height();จะเป็นความคิดที่ดีที่สุด
Josh Stodola

มีวิธีการแก้ปัญหา CSS บริสุทธิ์หรือไม่?
หน้ากาก

@ ให้ไม่มีไม่มี ยังไม่เป็นไร
Josh Stodola

@Jed แล้วคุณลองใช้ความสูงขั้นต่ำ: 100% แล้วลองใช้ใน Mac-Safari และบางทีเราสามารถหาวิธีแก้ไขได้ที่นี่ ฉันคิดว่ามันจะดีกว่าการโต้แย้งเกี่ยวกับแพลตฟอร์ม
Josh Stodola

3
สามารถใช้งานได้ใน IE7, Chrome3 และ Safari4 และ Opera10 ทั้งหมดทดสอบบน Windows ข้อเสียคือมันใช้จาวาสคริปต์ซึ่งเป็นสิ่งที่Maskต้องการหลีกเลี่ยง (ดูความคิดเห็นของเขาในคำตอบนี้) คำตอบของTandemAdamนั้นเป็น CSS ล้วนๆและทำงานได้กับทุกเบราว์เซอร์ที่ฉันทดสอบยกเว้น Opera
กลัว
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.