Скажи “НЕТ” <img> в вёрстке

Тэг IMG не очень удобен в качестве “кубика” нашего “сайтоконструктора” поскольку содержит некоторые ньюансы расположения и взаимодействия c другими “кубиками”. Конечно-же мы можем представить <img> как блочный элемент, для этого всего лишь нужно в css описании элемента указать свойство display: block, в этом случае тэг унаследует свойства блочного тэга (div). Но тогда какая уж тут логика? Блочный элемент подразумевает под собой какой-то прямоугольный блок содержимого. Куда же вписать это содержимое если сам тэг одинарный? То-то и оно, что никуда.

Поэтому, для вёрстки web-страницы я не рекоммендую использовать статичные img тэги. Вместо этого используйте специально предназначеные блочные тэги <div>. А файл картинки следует прописывать в css-файле, в качестве фона элемента.

Примерно так:

div.image1 {
width: 100px;
height: 150px;
background: url(images/pic1.png) no-repeat;
}

И редактировать удобнее и верстать.

И не бойтесь что ваши картинки не проиндексируют, элементы используемые в вёрстке не так важны как содержимое вашего сайта. А вот в контенте уже нужно добавлять картинки стандартным способом, т.е. тэгами <img>. SEO-специалисты меня поправят если я не прав.

Меню картинками

Вы хотите спросить, что делать, если вы хотите создать графическое меню? В книжке вы прочитали, что оно создаётся размещением тэга <img> внутрь тэга <a>? Забудьте про это, а “книгу в печку” как говорил профессор Преображенский.

В современных сайтах мы можем использовать только тэг <a> для отображения меню (но не нужно забывать размещать пункты меню в списки):

<ul id="mainmenu">
<li><a href="menu_item1"></a></li>
<li><a href="menu_item2"></a></li>
<li><a href="menu_item3"></a></li>
</ul>

Теперь описываем стили. Сначала общий вид:

ul#mainmenu{
display: block;
}
ul#mainmenu li{
display: block;
float: left;
width: 84px;
}
ul#mainmenu li a{
display: block;
height: 32px;
}

Если вам нужно будет размещать меню слева или справа относительно каких-то других объектов, то стоит добавить точную ширину элемента ul#mainmenu.

Описываем каждый пункт меню:

ul#mainmenu li#mm_home a{
background: url(images/home.png) no-repeat;
}
ul#mainmenu li#mm_home a:hover{
background: url(images/home_over.png) no-repeat;
}
ul#mainmenu li#mm_blog a{
background: url(images/blog.png) no-repeat;
}
ul#mainmenu li#mm_blog a:hover{
background: url(images/blog_over.png) no-repeat;
}
ul#mainmenu li#mm_author a{
background: url(images/author.png) no-repeat;
}
ul#mainmenu li#mm_author a:hover{
background: url(images/author_over.png) no-repeat;
}

Итог:

Даже работает! ))

А если отключить стили?

Например, если просматривать сайт на мобильном телефоне, у которого браузер не поддерживает CSS, что будет? Ни-че-го! Т. е. ничего не отобразится, ведь ссылка у нас пустая.

Предлагаю решение:
В каждый тэг <a> добавляем тэг <span> с текстм ссылки:

<li id="mm_home"><a href="home"><span>Home</span></a></li>

А в CSS скрываем этот <span>:

ul#mainmenu li a span{
display: none;
}

В итоге, если мы отключим CSS напрочь (это умеет, например, делать расширение Web Developer для Firefox), то наше меню превратится в читаемый список ссылок:
menu_without_css.png

Исходник меню: menu_without_img.zip

Дата: 11.09.2007
»
Категории: CSS | Веб‑дизайн
Google     

]]> munky ]]>

ul#mainmenu{
list-style:none;
margin:0;
padding:0;
height:32px}
ul#mainmenu li{
float:left}
ul#mainmenu li a{
display:block;
height:0;
padding:32px 0 0 0;
width:84px;
overflow:hidden}

»

]]> Никита ]]>

munky, объясните что вы написали и зачем?

»

]]> munky ]]>

ul#mainmenu{
list-style:none; – shtobi nebila list-style
margin:0; – shtobi nebila margin default
padding:0; – shtobi nebila padding default
height:32px – shtobi nenado bilo delatj posle menu clear:both
}
ul#mainmenu li{
float:left – prosto ukazivajem float:left, nichego bolshe nenado
}
ul#mainmenu li a{
display:block; – nu kaneshno block element
height:0; – visota 0
padding:32px 0 0 0; – padding 32px s sverxu (visota)
width:84px; – shirina
overflow:hidden – prjachim tekst
}

nu a potom mozhno vse kartinki objedinitj v odnu i toljko menjatj background-position dlja kazhdovo id ilji class.

primerna tak :)

»

]]> Никита ]]>

list-style: none – не обязательно. display: block убирает маркеры.

margin, padding – это уже опционально. Я могу значения по умолчанию поставить в самом начале для всех элементов.

height: 32px – вот это правильно

height:0; padding:32px 0 0 0; overflow:hidden; – красивое решение, и применимо если не использовать . Ну у меня немного другое и тоже функциональное.

Ох, точно про двойную картинку забыл!

»

]]> munky ]]>

list-style: none – lucshe vsegda ispoljzovatj. potomu shto slishkom mnogo u nas vsakix browserov :D

»

]]> munky ]]>

aa i esli delatj kakie nibudj rastojanije mezhdu linkami to togda nado lusche dobavljtatj ih v ul#mainmenu li a{
margin:}

potomu shto esli dobavlatj v li togda nado smotretj kak eto budet vigleditj v vsex browserow (imenno v IE)

»

]]> Никита ]]>

Каждый уважающий себя макетировщик с самого начала сбрасывает все дефолтные значения браузеров. С ними летят и margin и padding и list-style

»

]]> 3AHO3A ]]>

спасибо за инфу :)

»

]]> Никита ]]>

never_again, а с вашим кодом они разве будут показываться? Текст ссылки должен быть в тэге а или в тэге span? Дайте ссылку на рабочий вариант. А насчёт отключеных картинок это проблема.

Всё-всё, дошло! Спасибо!

»

]]> Dmitry Dulepov ]]>

Техника известная и удобная, хотя её можно оптимизировать ещё больше: http://developer.yahoo.com/performance/rules.html

»

]]> Никита ]]>

Ну-ф! Нет предела совершенству! ))

»

]]> pmaster ]]>

Очень даже кошерно!

»

]]> Борзов Серёжа ]]>

да вапще супер, как я кайфую от этих маковских кнопок, респект, молодца!

»

]]> Никита ]]>

либо у меня глючные IE 5.5 и IE 6.0, либо в них некорректно работает изменение background-position.

»

]]> Никита ]]>

IE глючный – это конечно понятно, это он вообще такой. Но вот что выяснилось:
background-position” не возвращается к 0 если его применять к “a span“, работает только если его применять к “a“.

»

]]> Никита ]]>

Да – решение, но это не валидный css, а так же приходится прописывать cursor: pointer, который всё равно в IE 5.5 не работает ))

Я немножко другое решение родил, но об этом в следующем посте.

»

]]> never_again ]]>

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

ждемс следующего поста)

а для ie

»

]]> never_again ]]>

извеняюсь.

а для ie младше 7 работает cursor:hand;

»

]]> Seleckis.lv :: журнал Никиты Селецкого » » Универсальное графическое меню ]]>

[...] меню Учтя замечания моих уважаемых комменаторов к посту о графическом меню выкладываю код и исходник обновлённого варианта [...]

»

]]> Никита ]]>

never_again, извеняюсь за SpamKarma. Засунул два последних комментария в спам. Только сейчас заметил.

Для ie младше 7 работает cursor: hand, но это опять же антивалидность ))

надеюсь мой второй вариант меню будет более востребованным. Там же перечислены все преимущества. Единственный минус – Дублирующиеся ссылки.

»

]]> J()KER ]]>

Интересно, а как “завернуть” в div графику разных размеров и разной центровки относительно вертикали?

»

]]> Никита ]]>

J()KER, можно пример? А то не совсем понятно про центровку по вертикали.

»

]]> Дмитрий ]]>

Метод хорош, однако, пока картинки не загрузились или если они вообще отключены, меню не будет видно

»

Напишите комментарий