CSS 100% высоты, а затем прокрутить DIV, а не страницу - PullRequest
49 голосов
/ 28 апреля 2010

Хорошо, пока я не смог найти вопрос с ответом, поэтому я решил сделать свой.

Я пытаюсь создать макет 100% жидкости, что технически я сделал. http://stickystudios.ca/sandbox/stickyplanner/layout/index2.php

НО, что я хочу сейчас сделать, это сделать страницу 100% в ВЫСОТЕ ... Но я не хочу, чтобы страница прокручивалась, я хочу, чтобы прокручивал внутренний DIV.

Таким образом, я считаю, что вкратце я хочу, чтобы он определял высоту экрана области просмотра, переходил на 100%, а затем, если содержимое длиннее экрана, прокручивал определенный DIV, а НЕ страницу.

Надеюсь, это имеет смысл.

Спасибо заранее. Джастин

Ответы [ 6 ]

58 голосов
/ 28 апреля 2010
<html>
  <body style="overflow:hidden;">
    <div style="overflow:auto; position:absolute; top: 0; left:0; right:0; bottom:0">
    </div>
  </body>
</html>

Это должно сделать это для простого случая

Я считаю, что это будет работать для вашего случая

<html>
  <body style="overflow:hidden;">
      <div id="header" style="overflow:hidden; position:absolute; top:0; left:0; height:50px;"></div>
      <div id="leftNav" style="overflow:auto; position:absolute; top:50px; left:0; right:200px; bottom:50px;"></div>
      <div id="mainContent" style="overflow:auto; position:absolute; top:50px; left: 200px; right:0; bottom:50px;"></div>
      <div id="footer" style="overflow:hidden; position:absolute; bottom:0; left:0; height:50px"></div>
  </body>
</html>

этот пример даст вам статический верхний и нижний колонтитулы и позволит прокручивать область навигации и области содержимого.

9 голосов
/ 28 апреля 2010

Это другой способ сделать это со всеми панелями abs, он не будет работать в IE6, но я могу предоставить обходной путь CSS для IE6, если это требование:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Fluid Layout</title>
 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
 <style rel="stylesheet" type="text/css">
    body { background-color:black; margin:0px; padding:0px; }
    .pageBox { position:absolute; top:20px; left:20px; right:20px; bottom:20px; min-width:200px}
    .headerBox { position:absolute; width:100%; height:50px; background-color:#333; }
    .contentBox { position:absolute; width:100%; top:52px; bottom:32px; background-color:blue; }
    .footerBox { position:absolute; width:100%; height:30px; background-color:#ccc; bottom:0px; }        
    .contentBoxLeft { position:absolute; width:20%; height:100%; background-color:#b6b6b6; }
    .contentBoxRight { position:absolute; width:80%; left:20%; height:100%; background-color:white; }    
    .contentBoxLeft,
    .contentBoxRight { overflow:auto; overflow-x:hidden; }
 </style>
 </head>
<body>&nbsp;
    <div class="pageBox">
        <div class="headerBox">Header</div>
        <div class="contentBox">
            <div class="contentBoxLeft">ContentLeft asdf asdf adsf assf</div>
            <div class="contentBoxRight">ContentRight asdf asdfa dasf asdf asdfd asfasd fdasfasdf dasfsad fdasfds<br /><br />asdfsad ff asdf asdfasd</div>
        </div>
        <div class="footerBox">Footer</div>
    </div>
</body>
</html>
6 голосов
/ 28 апреля 2010

make overflow:auto для div

2 голосов
/ 28 апреля 2010

переполнения: авто; в стиле DIV Вы просто должны знать, что размер div должен увеличиться, чтобы в нем могли отображаться свитки. Если вы увеличиваете размер страницы (который должен быть с style = "overflow: hidden;" на теле) это не сработает.

0 голосов
/ 27 февраля 2017

Вы можете попробовать это:

<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
 <style rel="stylesheet" type="text/css">
    .modal{width:300px;border:1px solid red;overflow: auto;opacity: 0.5;z-index:2;}
    .bg{background:-webkit-linear-gradient(top,red,green,yellow);width:1000px;height:2000px;top:0;left:0;}
    .btn{position:fixed;top:100px;left:100px;}
 </style>
 </head>
<body style='padding:0px;margin:0px;'>
	<div class='bg' style='position:static'></div>
	<div class='modal' style='display:none'></div>
	<button class='btn'>toggle </button>
</body>
<script>
	var str='',count=200;
	while(count--){
		str+=count+'<br>';
	}
	var modal=document.querySelector('.modal'),bg=document.querySelector('.bg'),
	btn=document.querySelector('.btn'),body=document.querySelector('body');
	modal.innerHTML=str;
	btn.onclick=function(){
		if(bg.style.position=='fixed'){
			bg.style.position='static';
			window.scrollTo(0,bg.storeTop);
		}else{
			let top=bg.storeTop=body.scrollTop;
			bg.style.position='fixed';
			bg.style.top=(0-top)+'px';
		}
		modal.style.display=modal.style.display=='none'?'block':'none';
	}
</script>
</html>
0 голосов
/ 15 июня 2016

Если вы не хотите использовать position: absolute (потому что это портит вашу печать, если ваши поля должны отличаться от всех нулей), вы можете сделать это с небольшим количеством JavaScript.

Настройте ваше тело и разделите его так, чтобы div мог прокручивать:

<body style='overflow:hidden'>
  <div id=scrollablediv style='overflow-y:auto;height:100%'>
    Scrollable content goes here
  </div>
</body>

Этот метод зависит от div, имеющего заданную высоту, и для этого нам требуется JavaScript.

Создайте простую функцию для сброса высоты вашего прокручиваемого div

function calculateDivHeight(){
  $("#scrollablediv").height(window.innerHeight);
}

А затем вызвать эту функцию как при загрузке страницы, так и при изменении ее размера.

// Gets called when the page loads
calculateDivHeight();

// Bind calculate height function to window resize
$(window).resize(function () {
  calculateDivHeight();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...