jPutty для вёрстки, плагин под jQuery

от автора

Задача

Вот с таким дизайном мне предстояло разработать сайт, главная страница делится на две полосы – тёмную и светлую. Тонкие линии и некоторые ключевые элементы расположены строго по принципу золотого сечения. И тут меня накрыло…

макет сайта Опять делать простые вещи сложным html+css кодом? Опять каждый браузер будет отображать страницу по-своему? Опять возиться с кроссбраузерностью? Писать хаки?

И почему таких проблем нет в desktop-программировании? Менять размеры элемента по формуле – пожалуйта. Пододвинуть кнопку левее на 17 пикселей – пожалуйста. Устроить принципиально разное расположение элементов в строгой зависимости от размеров окна – нет проблем! И только в html+css с этим могут возникнуть подобные трудности. Однажды я чуть не потерял заказчика, когда затянул с задачей «пододвинуть блок немножечко выше и левее»… мне пришлось основательно переделать всю вёрстку, потому что старая структура на такие перемещения блока рассчитана не была. Труд этот был не оценен, и поделом, ведь в результате я всего лишь пододвинул блок.

Всё, хватит, отныне я решил максимально использовать в вёрстке JavaScript. Да, я знаю что js включен не у всех. Да, я знаю, что сейчас мало кто так делает. По статистике, JavaScript выключен менее чем у 1% пользователей! Много это или мало?

jPutty

Идея была реализована в новом плагине под jQuery. Для тех, у кого выключен JavaScript, реализуем максимально простую вёрстку в подключенном обычном css-стиле (не к максимальной ли простоте стремятся такие пользователи?). Для тех, у кого JavaScript включен, запустится скрипт, реализующий специальное событие:

$(window).readyresize(function(width, height) { 	// using jPutty }); 

Событие “readyresize” вызывается один раз по завершению загрузки страницы, и каждый последующий раз при изменении размеров окна браузера.

Подробности на сайте плагина — jputty.ru/getting-started.

Как выглядит решение

Раз — фрагмент html-кода верхней (тёмной) половины страницы.
Каждый элемент – отдельный блок div. Не нужно никаких wrapper-ов, разделительных блоков, и прочих трюков.

<!-- Тёмная (верхняя) сторона сайта -->  <div id="dark">  	<!-- Sliderman Endegor's Degustation --> 	<div id="DegustationNavigation"></div> 	<div id="Degustation"> 	  <img src="./img/Degustation/cognac.png" width="383" height="600" alt="Degustation cognac" /> 	  <img src="./img/Degustation/riesling.png" width="383" height="600" alt="Degustation riesling" /> 	  <img src="./img/Degustation/bourgogne.png" width="383" height="600" alt="Degustation bourgogne" /> 	  <img src="./img/Degustation/bordeaux.png" width="383" height="600" alt="Degustation bordeaux" /> 	  <img src="./img/Degustation/champagne.png" width="383" height="600" alt="Degustation champagne" /> 	  <img src="./img/Degustation/martini.png" width="383" height="600" alt="Degustation martini" /> 	</div> 	<!-- /Sliderman Endegor's Degustation -->  	<div class="delivery_text">Доставка по Украине</div>  	<a href="#"> 	  <div class="shop_wine"></div> 	  <div class="shop_wine_text">вино</div> 	</a> 	<a href="#"> 	  <div class="shop_cognac"></div> 	  <div class="shop_cognac_text">коньяк</div> 	</a> 	<a href="#"> 	  <div class="shop_armagnac"></div> 	  <div class="shop_armagnac_text">арманьяк</div> 	</a>  	<div class="JJB"></div>  	<div class="line"></div>  </div> <!-- /Тёмная (верхняя) сторона сайта --> 

Два — соответствующий фрагмент css-кода.
Для блоков-текстов задаём шрифт, для блоков-картинок задаём фон.

#dark { background-color: #000; color: #f0f0f0; z-index: -10; }  #dark .delivery_text { text-align: right; font-size: 12pt; } 	 #dark .shop_wine { background-image: url(../img/shop/wine.png); } #dark .shop_wine_text { text-align: center; } #dark .shop_cognac { background-image: url(../img/shop/cognac.png); } #dark .shop_cognac_text { text-align: center; } #dark .shop_armagnac { background-image: url(../img/shop/armagnac.png); } #dark .shop_armagnac_text { text-align: center; } 	 #dark .JJB { background-image: url("../img/Jean Jacques Brissot.png"); } 	 #dark .line { background-color: #fff; z-index: -10; } 

И три! Фрагмент js-кода.
Указываем расположение каждого блока в зависимости от размеров (width и height) браузера.

$(window).readyresize(function(width, height) {  	...  	var dy = (height - 600) / 1.618 + 35;  	$('#dark').putty('xysize', 0, 0, width, height);  	$('#dark #Degustation').putty('xysize', 0, dy - 35 - 1, 383, 600); 	$('#dark #DegustationNavigation').putty('xysize', 0, dy - 35, 20, 600); 	$("#dark #DegustationNavigation a").each(function (i) { 		$(this).putty('xysize', 25, 10 + 25 * i, 11, 11); 	});  	$('#dark .delivery_text').putty('xysize', 0, 5, width - 50, 30);  	$('#dark .shop_wine').putty('xysize', (width - width / 1.618) - 48 / 2, dy, 48, 174); 	$('#dark .shop_wine_text').putty('xysize', (width - width / 1.618) - 100, dy + 174, 200, 36); 	$('#dark .shop_cognac').putty('xysize', (width / 1.618) - 68 / 2, dy + 174 - 139, 68, 139); 	$('#dark .shop_cognac_text').putty('xysize', (width / 1.618) - 100, dy + 174, 200, 36); 	$('#dark .shop_armagnac').putty('xysize', (3*width / 1.618 - width) - 36 / 2, dy + 174 - 172, 36, 172); 	$('#dark .shop_armagnac_text').putty('xysize', (3*width / 1.618 - width) - 100, dy + 174, 200, 36);  	$('#dark .JJB').putty('xysize', 383, height / 1.618 - 76, 768, 76);  	$('#dark .line').putty('xysize', 0, height / 1.618, width, 1);  	... }); 

Функция putty() принимает параметры x,y, width и height и задаёт их блоку через свойства css. Таким образом, положение блоков можно задавать динамически, используя все возможности языка JavaScript.

Ссылки и исходники

Сайт плагина jPutty — jputty.ru/
Демо: brissot.biz/
Исходники демо-сайта: data.brissot.biz/jjb.rar

ссылка на оригинал статьи http://habrahabr.ru/post/186484/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *