Установка высоты динамического динамического динамического динамического
В веб-приложении у меня есть страница, содержащая DIV, которая имеет автоматическую ширину в зависимости от ширины окна браузера.
Мне нужна автоматическая высота для объекта. DIV начинается с 300px с верхнего экрана, и высота его должна быть растянута до нижней части экрана браузера. У меня максимальная высота для контейнера DIV, поэтому для div должна быть минимальная высота. Я считаю, что могу просто ограничить это в CSS и использовать Javascript для обработки размера DIV.
Мой javascript не так хорош, как должен. Есть ли легкий script, который я мог бы написать, чтобы сделать это для меня?
Изменить:
DIV содержит элемент управления, который выполняет управление переполнением (реализует собственную полосу прокрутки).
Ответы
Ответ 1
Попробуйте эту простую, специфическую функцию:
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).
EDIT: Кстати, вы бы хотели называть это в этом div каждый раз, когда пользователь менял размер браузера, поэтому вам, конечно, нужно подключить обработчик событий для этого.
Ответ 2
Что должно произойти в случае переполнения? Если вы хотите, чтобы он просто дошел до нижней части окна, используйте абсолютное позиционирование:
div {
position: absolute;
top: 300px;
bottom: 0px;
left: 30px;
right: 30px;
}
Это положит DIV 30px с каждой стороны, 300px в верхней части экрана и заподлицо с нижней. Добавьте overflow:auto;
для обработки случаев, когда содержимое больше, чем div.
Редактировать: @Weverever отметили это, объяснение было бы хорошо... Что-то не так с ответом?
Ответ 3
В DIV находится элемент управления, который выполняет управление переполнением.
Ответ 4
Если я понимаю, что вы просите, это должно сделать трюк:
// 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";
Ответ 5
document.getElementById('myDiv').style.height = 500;
Это самый простой JS-код, необходимый для динамического изменения высоты вашего объекта. Я просто сделал это, когда у меня было свойство auto height, но когда я добавляю некоторый контент через XMLHttpRequest
, мне нужно было изменить размер моего родительского div, и это свойство offsetheight сделало трюк в IE6/7 и FF3
Ответ 6
С небольшими исправлениями:
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";
}
Ответ 7
Проще всего я мог придумать...
function resizeResizeableHeight() {
$('.resizableHeight').each( function() {
$(this).outerHeight( $(this).parent().height() - ( $(this).offset().top - ( $(this).parent().offset().top + parseInt( $(this).parent().css('padding-top') ) ) ) )
});
}
Теперь все, что вам нужно сделать, это добавить класс resizableHeight ко всему, что вы хотите авторизовать (для него родительский).
Ответ 8
вдохновленный @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");
}