<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ксдыщь! &#187; float</title>
	<atom:link href="http://flack.ru/tag/float/feed/" rel="self" type="application/rss+xml" />
	<link>http://flack.ru</link>
	<description>Вебдев и всякая фигня</description>
	<lastBuildDate>Mon, 06 Apr 2009 16:47:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Семантическая верстка — советы и решения. Часть VI. Запрет на обтекание float’ов</title>
		<link>http://flack.ru/2008/08/26/semantic-coding-howto-6/</link>
		<comments>http://flack.ru/2008/08/26/semantic-coding-howto-6/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 11:15:53 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Рецептарий]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[веб-стандарты]]></category>
		<category><![CDATA[запрет обтекания]]></category>

		<guid isPermaLink="false">http://flack.ru/2008/08/26/semantic-coding-howto-6/</guid>
		<description><![CDATA[На данном примере мы рассмотрим, как реализовать запрет на обтекание определенного элемента, к которому применено правило float. Нашей задачей является создание анонса новости. Макет выглядит следующим образом: Поскольку мы уже сошлись на отказе от таблиц в пользу семантики, нам потребуется минимум html-кода: &#60;div class="announce"&#62; &#60;img src="pic.gif" alt="" /&#62; &#60;h2&#62;&#60;a href="#"&#62;Россияне помогли&#60;/a&#62;&#60;/h2&#62; &#60;p&#62;Полиция турецкого города Измир [...]]]></description>
			<content:encoded><![CDATA[<p>На данном примере мы рассмотрим, как реализовать запрет на обтекание определенного элемента, к которому применено правило float. Нашей задачей является создание анонса новости. <span id="more-124"></span>Макет выглядит следующим образом:</p>
<p><img src="/wp-content/uploads/2008/08/image010.gif" alt="image010.gif" /></p>
<p>Поскольку мы уже сошлись на отказе от таблиц в пользу семантики, нам потребуется минимум html-кода:</p>
<pre><code>&lt;div class="announce"&gt;
    &lt;img src="pic.gif" alt="" /&gt;
    &lt;h2&gt;&lt;a href="#"&gt;Россияне помогли&lt;/a&gt;&lt;/h2&gt;
    &lt;p&gt;Полиция турецкого города Измир сообщила об аресте 17 участников группировки, занимавшейся мошенничеством и рассылкой вирусов в Сети.
     Арест произошел после того, как местные полицейские выяснили, что трое русских хакеров отправили в общей сложности миллион писем с
     вирусами и получили доступ к банковским счетам многих жителей Турции.&lt;/p&gt;
&lt;/div&gt;</code></pre>
<p>Зададим картинке float, чтобы прижать ее налево и соответствующие макету поля:</p>
<pre><code>.announce img {
    float:left;
    margin:0 10px 10px 0;
    }</code></pre>
<p>К сожалению, текст обтекает картинку, а это совсем не то, что нам требуется по условию задачи. Чтобы запретить обтекание применим дополнительные стили к тексту:<br />
<strong>style.css:</strong></p>
<pre><code>.announce p {
    overflow:hidden;
    }</code></pre>
<p><strong>ie.css:</strong></p>
<pre><code>.announce p {
    zoom:1; /* Для IE 7 */
   }
   * HTML .announce p {
        height:1%; /* Для IE 5,6 */
        }</code></pre>
<p>Voila!</p>
<p class="note">Внимательный читатель безусловно заметит, что для реализации задачи мы воспользовались правилами, указывающими Explorer’у на hasLayout. Таким образов еще раз показав их полезность.</p>
<p><strong>Материалы для изучения:</strong></p>
<ul>
<li><a href="http://cssing.org.ua/2005/07/03/display-table/">display:table</a></li>
<li><a href="http://www.pupinc.com/files/test/float.html">Pup&#8217;s Box Flow Hack</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2008/08/26/semantic-coding-howto-6/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Семантическая верстка — советы и решения. Часть V. Навигация по сайту или укрощение списков</title>
		<link>http://flack.ru/2008/02/08/semantic-coding-howto-5/</link>
		<comments>http://flack.ru/2008/02/08/semantic-coding-howto-5/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 19:42:32 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Рецептарий]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[веб-стандарты]]></category>

		<guid isPermaLink="false">http://flack.ru/2008/02/08/semantic-coding-howto-5/</guid>
		<description><![CDATA[Навигация — это то, с чего начинается любой сайт, ведь без нее пользователь просто не сможет им пользоваться. Не удивительно, что мы заострим на ее организации свое внимание. Представим себе кусочек макета, присланного нам дизайнером. На нем изображено главное меню будущего сайта: Пункт меню «Обратная связь» показывает поведение при наведении мышкой. Если забыть на время [...]]]></description>
			<content:encoded><![CDATA[<p>Навигация — это то, с чего начинается любой сайт, ведь без нее пользователь просто не сможет им пользоваться. Не удивительно, что мы заострим на ее организации свое внимание.</p>
<p>Представим себе кусочек макета, присланного нам дизайнером. На нем изображено главное меню будущего сайта:</p>
<p><img src="http://flack.ru/wp-content/uploads/2008/02/semantic-coding-5-0.gif" alt="Иллюстрация 1" /></p>
<p>Пункт меню «Обратная связь» показывает поведение при наведении мышкой.<span id="more-107"></span></p>
<p>Если забыть на время про семантику, то наше меню можно представить в HTML приверно так:</p>
<pre><code>&lt;table id=”main-nav”&gt;&lt;tr&gt;
        &lt;td&gt;&lt;a href=””&gt;Новости&lt;/a&gt;&lt;/td&gt;
	  …
    &lt;/tr&gt;
&lt;/table&gt;</code></pre>
<p>Набросать небольшой CSS, использовать Javascript для подсветки пункта при наведении мышкой и жить счастливо. Но не правильно.</p>
<p>При таком подходе мы теряем первичный структурный смысл нашей навигации. Любое меню — прежде всего список. Не даром мы говорим именно «пункт меню» и читаем книги, в которых оглавление более всего похоже именно на список.</p>
<p>Поэтому, вспомнив о семантике документа мы напишем код нашей навигации следующим образом:</p>
<pre><code>&lt;ul id=”main-nav”&gt;
    &lt;li&gt;&lt;a href=””&gt;Новости&lt;/a&gt;&lt;/li&gt;
    …
&lt;/ul&gt;</code></pre>
<p>Первый шаг к светлому будущему. Однако наше горизонтальное меню в данный момент выглядит в браузере следующим образом:</p>
<p><img src="http://flack.ru/wp-content/uploads/2008/02/semantic-coding-5-1.gif" alt="Иллюстрация 2" /></p>
<p>По сравнению с табличным решением мы сразу сталкиваемся с двумя очевидными проблемами. Во-первых, визуально неуместными маркерами списка, а во вторых с тем, что пока данное меню принять за горизонтальное может только очень незаурядный ум.</p>
<h4>Немного магии CSS</h4>
<p>Начнем с решения двух вышеназванных проблем:</p>
<pre><code class="css">* {margin:0;padding:0;}
body {
    padding:40px;
    background:#FFF;
    font:100.01% Tahoma,Helvetica,sans-serif;
    color:#000;
    }
ul#main-nav {
    float:left; /* Предотвращаем эффект, при котором список не охватит внутри себя свои пункты. Это будет видно, если задать ul видимые границы */
    font:bold .75em Tahoma,Helvetica,sans-serif; /* Устанавливаем параметры шрифта */
    }
ul#main-nav li {
    float:left; /* «Прижимаем» элементы списка налево, эмулируя горизонталь */
    list-style:none; /* Убираем маркеры у пунктов списка */
    }</code></pre>
<p class="note">Я не буду здесь останавливаться на механизмах работы правила float, так о нем можно писать целые книги. Подробное объяснение на русском можно почепнуть в статье Ивана Сагалаева «<a href="http://softwaremaniacs.org/blog/2005/12/01/css-layout-float/">Раскладка в CSS: float</a>».</p>
<p>В итоге мы получили следующий результат:</p>
<p><img src="http://flack.ru/wp-content/uploads/2008/02/semantic-coding-5-2.gif" alt="Иллюстрация 3" /></p>
<p>Как видите, мы уже значительно ближе к намеченной цели. Осталось лишь дописать оформительские эффекты. Все было бы очевидно, если бы не одно — нам необходимо организовать подсветку пункта меню при наведении на него мыши.</p>
<h4>Javascript? Не наш метод</h4>
<p>В стандарте CSS 2.1, который является текущим, предусмотрен псевдоселектор :hover, благодаря которому мы можем менять стиль элемента по тому же принципу, как делаем при onmouseover при помощи Javascript. Одна проблема — IE шестой версии и ниже применяет :hover только к ссылкам. Флагманы технического прогресса, что уж тут скажешь.</p>
<p>Но не стоит отчаиваться. Поскольку наш список все-таки является навигацией, в нем совершенно очевидным образом находятся ссылки, к которым :hover в IE 5 и 6 можно применить без лишних проблем. Заодно на ссылки мы навесим и другие элементы оформления, такие как оступы, границы и цвет.</p>
<pre><code class="css">ul#main-nav li a {
    display:block; /* Делаем ссылки блочным элементом, чтобы они могли нативно работать с внутренними полями */
    position:relative; /* Небольшой «хак», чтобы в IE кликабельная область распространилась на внутренние поля */
    padding:4px 8px; /* Внутренние поля */
    background:#FFF; /* Цвет фона */
    border:1px solid #CCC; /* Границы */
    border-width:1px 0 1px 1px;
    color:#47AAE9; /* Цвет шрифта */
    }
    ul#main-nav li a:hover {
        background:#F2F2F2; /* Цвет фона при наведении на ссылку */
        color:#000; /* Цвет шрифта при наведении на ссылку */
        }</code></pre>
<p>Осталась небольшая деталь. Так как мы не рисовали правую границу для ссылок внутри элементов списка — у нашего меню не хватает правой границы. Конечно можно было бы задать класс последнему элементу списка и переопределить нужные стили, но в данном случае можно сделать все проще и без лишней разметки. Достаточно лишь добавить границу самому списку.</p>
<pre><code class="css">ul#main-nav {
    float:left;
    border-right:1px solid #CCC;
    font:bold .75em Tahoma,Helvetica,sans-serif;
    }</code></pre>
<p><img src="http://flack.ru/wp-content/uploads/2008/02/semantic-coding-5-3.gif" alt="Иллюстрация 4" /></p>
<p>Отлично, не правда ли? Мы добились не только нужного визуального отображения, но и поведения, при этом используя лишь семантически верную HTML-разметку и CSS.</p>
<p class="note">У данного решения есть один минус — в Opera седьмых версий элементы списка не выстроятся линию, пока мы не зададим списку конкретную ширину. Это проблема продвинутого уровня и я не буду на ней останавливаться. Попытайтесь найти решение самостоятельно.</p>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2008/02/08/semantic-coding-howto-5/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
