Установка высоты DIV динамически - PullRequest
22 голосов
/ 28 августа 2008

В веб-приложении у меня есть страница, которая содержит DIV с автоматической шириной в зависимости от ширины окна браузера.

Мне нужна авто-высота для объекта. DIV начинается примерно с 300 пикселей от верхнего экрана, и его высота должна растягиваться до нижней части экрана браузера. У меня есть максимальная высота для контейнера DIV, поэтому для div должна быть минимальная высота. Я считаю, что могу просто ограничить это в CSS и использовать Javascript для обработки изменения размера DIV.

Мой JavaScript не так хорош, как следовало бы. Могу ли я написать простой сценарий, который бы сделал это для меня?

Edit: DIV содержит элемент управления, который выполняет собственную обработку переполнения (реализует собственную полосу прокрутки).

Ответы [ 8 ]

31 голосов
/ 28 августа 2008

Попробуйте эту простую, специфическую функцию:

function resizeElementHeight(element) {
  var height = 0;
  var body = window.document.body;
  if (window.innerHeight) {
      height = window.innerHeight;
  } else if (body.parentElement.clientHeight) {
      height = body.parentElement.clientHeight;
  } else if (body && body.clientHeight) {
      height = body.clientHeight;
  }
  element.style.height = ((height - element.offsetTop) + "px");
}

Это не зависит от текущего расстояния от верхней части указанного тела (в случае изменения 300px).


РЕДАКТИРОВАТЬ: Кстати, вы захотите вызывать это в этом div каждый раз, когда пользователь изменяет размер браузера, так что вам, конечно, потребуется подключить обработчик событий для этого.

9 голосов
/ 28 августа 2008

Что должно произойти в случае переполнения? Если вы хотите, чтобы он просто попал в нижнюю часть окна, используйте абсолютное позиционирование:

div {
  position: absolute;
  top: 300px;
  bottom: 0px;
  left: 30px;
  right: 30px;
}

Это поместит DIV 30px с каждой стороны, 300px от верхней части экрана и заподлицо с нижней. Добавьте overflow:auto; для обработки случаев, когда содержимое больше, чем div. <Ч /> Изменить: @ Кто бы это ни отмечал, объяснение было бы неплохо ... Что-то не так с ответом?

3 голосов
/ 28 августа 2008

document.getElementById('myDiv').style.height = 500;

Это базовый код JS, необходимый для динамической настройки высоты вашего объекта. Я только что сделал это, когда у меня было свойство auto height, но когда я добавил немного контента через XMLHttpRequest, мне нужно было изменить размер родительского div, и это свойство offsetheight добилось успеха в IE6 / 7 и FF3

0 голосов
/ 05 ноября 2016

вдохновлено @ jason-bunting, то же самое для высоты или ширины:

function resizeElementDimension(element, doHeight) {
  dim = (doHeight ? 'Height' : 'Width')
  ref = (doHeight ? 'Top' : 'Left')

  var x = 0;
  var body = window.document.body;
  if(window['inner' + dim])
    x = window['inner' + dim]
  else if (body.parentElement['client' + dim])
    x = body.parentElement['client' + dim]
  else if (body && body['client' + dim])
    x = body['client' + dim]

  element.style[dim.toLowerCase()] = ((x - element['offset' + ref]) + "px");
}
0 голосов
/ 26 сентября 2014

Самое простое, что я мог придумать ...

function resizeResizeableHeight() {
    $('.resizableHeight').each( function() {
        $(this).outerHeight( $(this).parent().height() - ( $(this).offset().top - ( $(this).parent().offset().top + parseInt( $(this).parent().css('padding-top') ) ) ) )
    });
}

Теперь все, что вам нужно сделать, это добавить класс resizableHeight ко всему, что вы хотите изменить (к его родительскому элементу).

0 голосов
/ 12 ноября 2009

С небольшими исправлениями:

function rearrange()
{
var windowHeight;

if (typeof window.innerWidth != 'undefined')
{
    windowHeight = window.innerHeight;
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first
// line in the document)
else if (typeof document.documentElement != 'undefined'
        && typeof document.documentElement.clientWidth != 'undefined'
        && document.documentElement.clientWidth != 0)
{
    windowHeight = document.documentElement.clientHeight;
}
// older versions of IE
else
{
    windowHeight = document.getElementsByTagName('body')[0].clientHeight;
}

document.getElementById("foobar").style.height = (windowHeight - document.getElementById("foobar").offsetTop  - 6)+ "px";
}
0 голосов
/ 28 августа 2008

Если я понимаю, что вы спрашиваете, это должно сработать:

// the more standards compliant browsers (mozilla/netscape/opera/IE7) use 
// window.innerWidth and window.innerHeight

var windowHeight;

if (typeof window.innerWidth != 'undefined')
{
    windowHeight = window.innerHeight;
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first 
// line in the document)
else if (typeof document.documentElement != 'undefined'
        && typeof document.documentElement.clientWidth != 'undefined' 
        && document.documentElement.clientWidth != 0)
{
    windowHeight = document.documentElement.clientHeight;
}
// older versions of IE
else
{
    windowHeight = document.getElementsByTagName('body')[0].clientHeight;
}

document.getElementById("yourDiv").height = windowHeight - 300 + "px";
0 голосов
/ 28 августа 2008

DIV содержит элемент управления, который выполняет собственную обработку переполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...