Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2013, 22:15
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

Помогите разобраться с onload
Здравствуйте. Помогите разобраться с onload.

У меня есть два блока на сайте sidebar и main_container.
Sidebar шириной 200 пикселей, задается в css.

А main_container ширина не указана, но при загрузке страницы, его ширина задается скриптом. и рассчитывается так body.clientWidth - 200.

Допустим экран шириной 1000 пикселей, значит main_container будет 800 п.

Далее, браузер автоматически рассчитывает высоту исходя из количества контента в них.

Допустим в main_container много текста, и при ширине 800п он получает высоту 1200п.

Следующий шаг, скрипт задает высоту для sidebar такую же как и для контейнера, если контейнер получился 1200 п, то и sidebar будет 1200 п.



Но проблема в следущем, когда страница загружается, и срабатывает onload, который задает все величины, то он почему то видит что ширина контейнера не 800п а все 1000, и высота соответственно не 1200, а 900п.

Но самое главное, что далее то видно что контейнер подгрузился нормально, принял высоту ширину 800п и высоту 1200п., а sidebar так и остался 900п.

ХОТЯ, в коде явно указано, что сначала он изменяет ширину контейнера, и получает его высоту, а затем уже эту высоту применяет к sidebar. Вот код скрипта

var bodyH = document.body.clientHeight;
	var bodyW = document.body.clientWidth;
	var containerH = document.getElementById('main_container').clientHeight;
	var sidebarH = document.getElementById('sidebar').clientHeight;
	
	bodyW = bodyW - 225 - 50;
	document.getElementById('main_container').style.width = bodyW + 'px';
	
	bodyH = bodyH - 30;
	if(containerH < bodyH) { containerH = bodyH; document.getElementById('main_container').style.height = bodyH + 'px'; }
	bodyH = bodyH + 30;
	sidebarH = containerH;
	alert(containerH);
	if(bodyH > sidebarH) sidebarH = bodyH;
	document.getElementById('sidebar').style.height = sidebarH + 'px';
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2013, 22:20
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

Выше я привел код функции main, которая запускается событиями onload и onresize.

При onload, получается та проблема которую я описал выше, как буд то какой то элемент не успевает подгрузиться во время выполнения скрипта.

А при событии onresize, все работает четко, все величины рассчитываются как нужно.
Ответить с цитированием
  #3 (permalink)  
Старый 25.12.2013, 22:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Все просто: для верстки нужно использовать CSS, а не JS!
Я как верстальщик с очень неплохим стажем, скажу прямо - еще ни разу за свою практику не пришлость втыкать костыли на js (ну разве что кроме position: sticky эмуляции) - практически все решается через css
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 25.12.2013, 22:34
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

У меня малый стаж, и не могу до сих пор найти решения как сделать блоки одинаковой высоты, везде либо скриптами предлагают, либо таблицами.

Да и к тому же, скриптами можно более точно настроить размеры.

Допустим ширина родительского блока 1000п.
Внутри него создаем блок с width: 100% и padding: 100п.

Как сделать, чтобы ширина блока получилась именно 800п, а вместе с отступами слева и справа 1000?
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2013, 23:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от sss2019
Как сделать, чтобы ширина блока получилась именно 800п, а вместе с отступами слева и справа 1000?
Дык если блок не float, то просто задать паддинг, а ширину оставить auto. Блок автоматом примет всю доступную ширину.
Ну а если случай не тот, то:
box-sizing: border-box плюс продублировать с -webkit- и -moz-

Сообщение от sss2019
У меня малый стаж, и не могу до сих пор найти решения как сделать блоки одинаковой высоты, везде либо скриптами предлагают, либо таблицами.
Как вариант можно через display:table-cell.

Вобще без макета сложно что-то сказать. Нужен макет или ссылка на текущую верстку.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа сервера через iframe и xhr. Помогите разобраться. Arconas AJAX и COMET 0 26.02.2013 10:38
Помогите разобраться ... Я новенький в JS ... bogong Общие вопросы Javascript 23 27.12.2011 19:20
Помогите разобраться с this Nigga2102 Элементы интерфейса 4 04.05.2011 18:28
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24