Авто высота ячеек маркированного списка

25 марта 2011 г.

Эта наработка, точнее небольшой скрипт, очень спорный в практическом применение т.к. то, что он делает можно добиться без всяких скриптов, воспользовавшись просто старыми добрыми таблицами! Но если Вы ярый приверженец блочной верстки и не терпите таблиц или просто напросто заказчик просил их не использовать, этот пост для Вас и скорее всего он поможет новичкам!

Как мы знаем, чтобы построить допустим анонсы статей в шапке, пример:
Пример таблиц
Очень удобно использовать конструкцию маркированного списка:

<ul>
	<li>...</li>
	<li>...</li>
	<li>...</li>
</ul>


Но этот список иногда себя не очень удобно для нас ведет, ведь если мы располагаем ячейки горизонтально с помощью float:left, то каждая ячейка принимает ту высоту, которую определит ей контент внутри неё. Выглядит так:
Пример 1
Так вот если нам нужно, чтобы все ячейки равнялись на высоту самой большой ячейки, я нашел 2 метода:
Метод №1
Через CSS, без JS

ul{
overflow: hidden;
}
li{
float:left;
width:200px;
padding-bottom:10000px;
margin-bottom:-10000px;
}

Этот метод хорош тем, что он легкий и понятный даже новичку. Но если стоит задача со сложным оформление такого списка, тогда этот список никак не подойдет, ведь у него нету «дна», нижняя граница таких ячеек находится далеко внизу страницы из-за огромных padding’ов. В той работе, из-за который я начинал поиски решения подобной задачи, меня вполне устроил этот метод, т.к. сложного оформления не было и «низы» ячеек и в общем списка, были не задействованы. Но мне было интересно избавиться от «минусов» первого метода(это совпало с желанием изучать JS) и так я дошел до метода 2.
Метод №2
Изпользует JavaScript

//Начало скрипта
window.onload = function() {
function getClass(name,type) { // ф-ция выборки списка по его классу
var r = [];
var re = new RegExp(&quot;(^| )&quot; + name + &quot;( |$)&quot;);
var e = document.getElementsByTagName(type || &quot;*&quot;);
for ( var i = 0, len = e.length; i &lt; len; i++ )
if ( re.test(e[i].className) ) r.push( e[i] );
return r;
}
var elementul = getClass(&quot;autoh&quot;, &quot;ul&quot;); // выбираем список с определенным классом(в данном случае &quot;autoh&quot;)
var h = elementul[0].offsetHeight; //замеряем высоту большей ячейки в списке
var elementli = elementul[0].getElementsByTagName('LI'); // отбираем в массив элементы списка
for(var i=0; i&lt;elementli.length; i++) { // в цикле присваиваем каждому элементы новую высоту
elementul[0].getElementsByTagName('LI')[i].style.height = h + &quot;px&quot;;
}
}
//Конец скрипта

Ну кто знаком с JS поймут как работает скрипт, единственное я позаимствовал функцию выборки элементов DOM по классу, на мой взгляд очень удобно, просто прописал списку класс и все работает!
Использование скрипта:

  1. Копируем код, подцепляем его к страницы, на которой заветный список
  2. Присваиваем списку класс «autoh» из моего примеры, можно использовать свой класс, только не забыть исправить этот класс и в скрипте

И получается такая картина:
Пример 2

Теги: рубрика Сайтостроение