ฉันมีแถบนำทางที่ด้านซ้ายของหน้าของฉันและฉันต้องการให้มันยืดได้ถึง 100% ของความสูงของหน้า ไม่ใช่แค่ความสูงของวิวพอร์ต แต่รวมถึงพื้นที่ที่ซ่อนไว้จนกว่าคุณจะเลื่อน ฉันไม่ต้องการใช้จาวาสคริปต์เพื่อทำสิ่งนี้ให้สำเร็จ
มันสามารถทำได้ใน HTML / CSS?
ฉันมีแถบนำทางที่ด้านซ้ายของหน้าของฉันและฉันต้องการให้มันยืดได้ถึง 100% ของความสูงของหน้า ไม่ใช่แค่ความสูงของวิวพอร์ต แต่รวมถึงพื้นที่ที่ซ่อนไว้จนกว่าคุณจะเลื่อน ฉันไม่ต้องการใช้จาวาสคริปต์เพื่อทำสิ่งนี้ให้สำเร็จ
มันสามารถทำได้ใน HTML / CSS?
คำตอบ:
นี่คือวิธีแก้ปัญหาที่ฉันใช้ในที่สุดเมื่อใช้ div เป็นที่เก็บสำหรับพื้นหลังแบบไดนามิก
z-index
ใช้ที่ไม่ใช่พื้นหลังleft
หรือright
สำหรับคอลัมน์เต็มความสูงtop
หรือbottom
สำหรับแถวเต็มความกว้างแก้ไข 1: CSS ด้านล่างนี้ได้รับการแก้ไขเพราะมันไม่แสดงอย่างถูกต้องใน FF และ Chrome ย้ายposition:relative
ที่จะอยู่ใน HTML และตั้งร่างกายเพื่อแทนheight:100%
min-height:100%
แก้ไข 2:เพิ่มความคิดเห็นพิเศษใน CSS เพิ่มคำแนะนำเพิ่มเติมด้านบน
CSS:
html{
min-height:100%;/* make sure it is at least as tall as the viewport */
position:relative;
}
body{
height:100%; /* force the BODY element to match the height of the HTML element */
}
#cloud-container{
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
overflow:hidden;
z-index:-1; /* Remove this line if it's not going to be a background! */
}
html ที่:
<!doctype html>
<html>
<body>
<div id="cloud-container"></div>
</body>
</html>
ทำไม?
html{min-height:100%;position:relative;}
หากไม่มีสิ่งนี้ DIV ของคลาวด์คอนเทนเนอร์จะถูกลบออกจากบริบทโครงร่างของ HTML position: relative
ตรวจสอบให้แน่ใจว่า DIV ยังคงอยู่ภายในกล่อง HTML เมื่อถูกวาดเพื่อbottom:0
อ้างอิงถึงด้านล่างของกล่อง HTML คุณยังสามารถใช้height:100%
บน cloud-container เนื่องจากตอนนี้อ้างถึงความสูงของแท็ก HTML ไม่ใช่วิวพอร์ต
html
องค์ประกอบ ทำไมถึงเป็นอย่างนั้น?
height
กำลังพูดว่า 'คุณสูงขนาดนี้ แค่.' ซึ่งหมายความว่ามันจะเป็นความสูงของวิวพอร์ต เราต้องการให้สูงอย่างน้อยวิวพอร์ตหรือสูงกว่า min-height
ทำอย่างนี้
<html>
และการกำหนดตำแหน่งไปที่วิวพอร์ตเป็นสองสิ่งที่แยกจากกัน ขอบคุณ!
ด้วย HTML5 height: 100vh
วิธีที่ง่ายที่สุดก็คือการทำ ตำแหน่ง 'vh' หมายถึงความสูงวิวพอร์ตของหน้าต่างเบราว์เซอร์ ตอบสนองต่อการปรับขนาดเบราว์เซอร์และอุปกรณ์มือถือ
vw
โดยวิธีการที่ผมมองมันขึ้นนอกจากนี้ยังมี
ฉันมีปัญหาที่คล้ายกันและวิธีแก้ไขคือ:
#cloud-container{
position:absolute;
top:0;
bottom:0;
}
ฉันต้องการ div ที่อยู่กึ่งกลางหน้าด้วยความสูง 100% ของความสูงของหน้าดังนั้นโซลูชันโดยรวมของฉันคือ:
#cloud-container{
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
width: XXXpx; /*otherwise div defaults to page width*/
margin: 0 auto; /*horizontally centers div*/
}
คุณอาจต้องทำให้องค์ประกอบหลัก (หรือ 'ร่างกาย') มี position: relative;
cloud-container
?
คุณสามารถโกงโดยใช้Faux Columns หรือคุณสามารถใช้CSS trickery
มันง่ายโดยใช้ตาราง:
<html>
<head>
<title>100% Height test</title>
</head>
<body>
<table style="float: left; height: 100%; width: 200px; border: 1px solid red">
<tbody>
<tr>
<td>Nav area</td>
</tr>
</tbody>
</table>
<div style="border: 1px solid green;">Content blabla... text
<br /> text
<br /> text
<br /> text
<br />
</div>
</body>
</html>
เมื่อได้รับการแนะนำให้รู้จักกับผู้คนผู้คนต่างก็กลัวโต๊ะจน DIV ที่น่าสงสารกลายเป็นค้อนเปรียบเทียบ
ใช้ตำแหน่งที่แน่นอน โปรดทราบว่านี่ไม่ใช่วิธีการที่เราคุ้นเคยกับการใช้ตำแหน่งสัมบูรณ์ซึ่งต้องการการจัดวางสิ่งต่าง ๆ ด้วยตนเองหรือมีบทสนทนาแบบลอยตัว สิ่งนี้จะยืดโดยอัตโนมัติเมื่อคุณปรับขนาดหน้าต่างหรือเนื้อหา ฉันเชื่อว่าต้องใช้โหมดมาตรฐาน แต่จะทำงานใน IE6 ขึ้นไป
เพียงแค่แทนที่ div ด้วย id 'thecontent' ด้วยเนื้อหาของคุณ (ความสูงที่ระบุมีเพียงภาพประกอบเท่านั้นคุณไม่จำเป็นต้องระบุความสูงของเนื้อหาจริง
<div style="position: relative; width: 100%;">
<div style="position: absolute; left: 0px; right: 33%; bottom: 0px; top: 0px; background-color: blue; width: 33%;" id="navbar">nav bar</div>
<div style="position: relative; left: 33%; width: 66%; background-color: yellow;" id="content">
<div style="height: 10000px;" id="thecontent"></div>
</div>
</div>
วิธีการทำงานนี้คือ div ภายนอกทำหน้าที่เป็นจุดอ้างอิงสำหรับแถบนำทาง div ภายนอกถูกยืดออกโดยเนื้อหาของ div 'เนื้อหา' แถบนำทางใช้การกำหนดตำแหน่งแบบสัมบูรณ์เพื่อยืดตัวเองออกไปจนถึงความสูงของพาเรนต์ สำหรับการจัดตำแหน่งแนวนอนเราทำให้ div เนื้อหาชดเชยตัวเองด้วยความกว้างเดียวกันของ navbar
สิ่งนี้ทำให้ง่ายขึ้นด้วย CSS3 flex box model แต่ยังไม่พร้อมใช้งานใน IE และมีนิสัยแปลก ๆ
ฉันพบปัญหาเดียวกันกับคุณ ฉันต้องการที่จะทำให้DIV
เป็นพื้นหลังทำไมเพราะง่ายต่อการจัดการ div ผ่าน javascript ยังมีสามสิ่งที่ฉันทำใน CSS สำหรับกองนั้น
CSS:
{
position:absolute;
display:block;
height:100%;
width:100%;
top:0px;
left:0px;
z-index:-1;
}
หากคุณกำหนดเป้าหมายเบราว์เซอร์ที่ทันสมัยกว่าชีวิตอาจเป็นเรื่องง่าย ลอง:
.elem{
height: 100vh;
}
หากคุณต้องการที่ 50% ของหน้าแทนที่ 100 ด้วย 50
ฉันต้องการที่จะครอบคลุมหน้าเว็บทั้งหมดก่อนที่จะให้ป๊อปอัพเป็นกิริยาช่วย ฉันลองวิธีการมากมายโดยใช้ CSS และ Javascript แต่ก็ไม่มีวิธีใดที่จะช่วยแก้ปัญหาดังต่อไปนี้ มันเหมาะกับฉันฉันหวังว่ามันจะช่วยคุณได้เช่นกัน
<!DOCTYPE html>
<html>
<head>
<style>
html, body {
margin: 0px 0px;
height 100%;
}
div.full-page {
position: fixed;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
background-color: #000;
opacity:0.8;
overflow-y: hidden;
overflow-x: hidden;
}
div.full-page div.avoid-content-highlight {
position: relative;
width: 100%;
height: 100%;
}
div.modal-popup {
position: fixed;
top: 20%;
bottom: 20%;
left: 30%;
right: 30%;
background-color: #FFF;
border: 1px solid #000;
}
</style>
<script>
// Polling for the sake of my intern tests
var interval = setInterval(function() {
if(document.readyState === 'complete') {
clearInterval(interval);
isReady();
}
}, 1000);
function isReady() {
document.getElementById('btn1').disabled = false;
document.getElementById('btn2').disabled = false;
// disable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'hidden';
}
function promptModalPopup() {
document.getElementById("div1").style.visibility = 'visible';
document.getElementById("div2").style.visibility = 'visible';
// disable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'hidden';
}
function closeModalPopup() {
document.getElementById("div2").style.visibility = 'hidden';
document.getElementById("div1").style.visibility = 'hidden';
// enable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'scroll';
}
</script>
</head>
<body id="body">
<div id="div1" class="full-page">
<div class="avoid-content-highlight">
</div>
</div>
<button id="btn1" onclick="promptModalPopup()" disabled>Prompt Modal Popup</button>
<div id="demo">
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
</div>
<div id="div2" class="modal-popup">
I am on top of all other containers
<button id="btn2" onclick="closeModalPopup()" disabled>Close</button>
<div>
</body>
</html>
โชคดี ;-)
* {
margin: 0;
}
html, body {
height: 90%;
}
.content {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto ;
}
document.body.onload = function () {
var textcontrol = document.getElementById("page");
textcontrol.style.height = (window.innerHeight) + 'px';
}
<html>
<head><title></title></head>
<body>
<div id="page" style="background:green;">
</div>
</body>
</html>
ง่ายเพียงแค่ห่อมันใน div table ...
HTML:
<div class="fake-table">
<div class="left-side">
some text
</div>
<div class="right-side">
My Navigation or something
</div>
</div>
CSS:
<style>
.fake-table{display:table;width:100%;height:100%;}
.left-size{width:30%;height:100%;}
.left-size{width:70%;height:100%;}
</style>