papilio

Записи с меткой «Вёрстка»

Динамическая иконка

В предыдущем посте мы создали иконку в Corel Draw. Теперь нам надо сделать так, чтобы при наведении на неё она либо плавно увеличивалась, либо просто меняла прозрачность. Всё это мы попробуем реализовать с помощью JavaScript фреймворка jQuery.

Сначала нам надо просто скачать последнюю версию jQuery, переименовать в jquery.js и положить в папку с программой.

[cc lang="html"]
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
<html xmlns="http://www.w3.org/1999/xhtml">

<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="jquery.js"></script>
[/cc]

Теперь создадим главный слой wrap, в котором будет содержаться все остальные слои:

[cc lang="html"]
<div id="wrap">
...
</div>
[/cc]

Внутрь него вложим два слоя: один будет содержать иконку small.png размера 70 пикселей, а другой иконку big.png размером 80 пикселей. Второй слой как раз и будет отображаться при наведении на иконку мышкой.

[cc lang="html"]
<div id="wrap">
<div id="small_ball"></div>
<div id="big_ball"></div>
</div>
[/cc]

Определим для этих слоёв свойства. Во-первых, чтобы красиво смотрелось сделаем выравнивание по центру. Во-вторых, два слоя, содержащие изображение, поместим вниз слоя wrap для того, чтобы при увеличении тень смотрелась естественней — для этого определим их позицией absolute, а слой wrap с relative. Также выключим отображение второго слоя с большой иконкой.

[cc lang="css"]
#wrap {
position:relative;
width:200px; height:100px;
text-align:center;
border:1px solid black;
}
#small_ball {
position:absolute;
width:90px;
bottom:0; left:50%;
margin-left:-45px;
z-index:1;
}
#big_ball {
position:absolute;
width:90px;
bottom:0; left:50%;
margin-left:-45px;
z-index:2;
display:none;
}
[/cc]

Теперь самое интересное: нам надо сделать так, чтобы тогда, когда курсор мышки находится над иконкой, она увеличилась в размере, а когда убираем курсор — уменьшалась. Для первого случая это событие mouseover, для второго — mouseout. В jQuery всё достаточно легко и просто. Многое описано в документации. Чтобы плавно увеличить иконку, воспользуемся эффектом fadeIn:

[cc lang="javascript"]
$(document).ready (function (){
$(«#small_ball»).mouseover (function (){
$(«#big_ball»).fadeIn (500);
});
$(«#big_ball»).mouseout (function (){
$(«#big_ball»).fadeOut (300);
});
});
[/cc]

Из этого кода видно, что мы увеличиваем прозрачность элемента с идентификатором big_ball (слоя с большой иконкой) за 500 миллисекунд при возникновении события mouseover на элементе small_ball (слой с маленькой иконкой).

Вот, что получилось:

Уже после создания этого я нашёл интересное решение, как раз связанное с Dock: Fisheye от Interface. Советую присмотреться.

Метки: , , , ,

Вёрстка, когда много мониторов

Недавно делал сайт, который содержит в середине всего лишь одну фотографию, края у которой закруглены, на полосатом фоне:

Вёрстка: фотография с закруглеными углами

Всё было бы легко, если фотография была бы небольшого размера (не более, чем 640×480) — я бы просто её отцентровал и больше бы не парился. Но нет так-то всё просто: фотография размером почти 1280×800 и при этом её нельзя ужимать, (поставив в качестве ширины, например, 100%), так как должны сохраниться оригинальные размеры.

Если такую фотографию просто разместить на сайте, то для маленьких мониторов тут же появятся полосы прокрутки, поэтому я решил сделать её фоном, размещённым по центру:

div#splash {
	position:absolute;
	z-index:2;
	background: url('/images/splash.jpg') 50% 50% no-repeat;
	width:100%; height:100%;
}

Всё получилось: я разместил и полосатый фон, и изображение-фотографию. Но ведь у фотографии края закруглены, а это означает, что в этом месте у изображения должен быть либо полосатый фон, либо прозрачность, через которую виден основной фон — вот в этом и была основная проблема. Во-первых, у JPEG нет прозрачности, и ставить фон в краях оказалось нецелесообразным, так как он попросту мог не совместиться с основным фоном. Во-вторых, можно было попробовать использовать PNG-24, но из-за большого размера и из-за плохой совместимости с IE6 и это решение было отвергнуто. В итоге прошлось немного извращаться поэкспериментировать с фоном: я создал очень большой (3000×3000) полосатый фон в формате GIF с прозрачным отверстием посередине, вставил ещё туда текст и стал его использовать в качестве основного:

Вёрстка: фон с отверстием
div#wrap {
	position:absolute;
	z-index:3;
	background: transparent url('/images/bg.gif') 50% 50%;
	width:100%; height:100%;
}

А фотографию сохранил в JPG без всяких закруглений:

Вёрстка: одна фотография

Проставил z-index в двух этих слоях, где у фона был наибольший, поэтому фактически всё получилось:

Вёрстка: фотография с фоном

Вот такое трюк я и сделал на elinalipona.eu. Этот сайт прекрасно отображается на различных мониторах:

Вёрстка: elinalipona.eu

Метки: , , , , ,