<?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>Seleckis.lv :: журнал Никиты Селецкого &#187; CSS</title>
	<atom:link href="http://seleckis.lv/category/journal/css/feed" rel="self" type="application/rss+xml" />
	<link>http://seleckis.lv</link>
	<description></description>
	<lastBuildDate>Tue, 08 Feb 2011 13:52:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Seleckis’ method vs Pixy’s method</title>
		<link>http://seleckis.lv/journal/css/seleckis-method-vs-pixy-s-method</link>
		<comments>http://seleckis.lv/journal/css/seleckis-method-vs-pixy-s-method#comments</comments>
		<pubDate>Sun, 16 Aug 2009 20:01:41 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1695</guid>
		<description><![CDATA[Честное слово, пытался найти и убедить себя в том, что этот метод уже существует. Не нашёл. Исправьте меня если я не прав.
Pixy’s method отображение картинок с надписями заключался в том, чтобы внутрь блока с текстом поместить пустой &#60;span&#62;, и вставить картинку как фон для этого span-а. Причём, для того чтобы текст показывался в случае если [...]]]></description>
			<content:encoded><![CDATA[<p>Честное слово, пытался найти и убедить себя в том, что этот метод уже существует. Не нашёл. Исправьте меня если я не прав.</p>
<p>Pixy’s method отображение картинок с надписями заключался в том, чтобы внутрь блока с текстом поместить пустой &lt;span&gt;, и вставить картинку как фон для этого span-а. Причём, для того чтобы текст показывался в случае если картинки отключены, необходимо span поместить поверх текста.</p>
<p>В методе Pixy, для того чтобы &lt;span&gt; с картинкой налез на текст используется абсолютное позиционирование. В таких условиях кнопка не может находиться в строке, она может существовать только как блочный элемент. Почему? Потому что Firefox 2 не поддерживает свойство «display: inline-block». Для отображения блока в строке в Firefox-е используется проприетарное свойство «display: -moz-inline-box» или «display: -moz-inline-stack». Но в таком случае браузер не совсем адекватно позиционирует помещённые внутрь элементы. В частности некорректно работает абсолютное позиционирование.</p>
<p>Задачи, с которыми я сталкивался в вёрстке, требуют гораздо более эффективного решения. Вот эти задачи на примере создания ссылки-кнопки:</p>
<ol>
<li>Ссылка должна быть «инлайновая», т. е. чтобы можно было поместить в строке.</li>
<li>При отключенных картинках в браузере вместо кнопки должна быть надпись-ссылка.</li>
<li>У кнопки должен работать «ховер» — при наведении мышкой, картинка должна меняться.</li>
</ol>
<h3>Метод Селецкого (Seleckis’ Method)</h3>
<p>Фактически тот же Pixy’s method, только:</p>
<ol>
<li>используется строчный блок (inline-block),</li>
<li>&lt;span&gt; помещается не после текста, а перед,</li>
<li>не &lt;span&gt; налезает на текст, а текст подлезает под &lt;span&gt;.</li>
</ol>
<p>Ну а в качестве реализации «ховера» выступает обычный CSS-спрайт.</p>
<p>Итак HTML:</p>
<pre lang="html4strict">
<a href="#" class="seleckis"><span></span>Seleckis</a>
</pre>
<p>CSS:</p>
<pre lang="css">
.seleckis {
	/* только для FF2 */
	display: -moz-inline-box;
	-moz-box-orient: vertical;

	/* Для остальных */
	display: inline-block;

	line-height: 20px;
	text-align: center;
}
.seleckis span {
	display: block;
	position: relative;
	margin-bottom: -20px;
}
.seleckis,
.seleckis span {
	height: 20px;
	width: 74px;
	background-image: url(seleckis.gif) no-repeat top left;
}
a.seleckis:hover,
a.seleckis:hover span {
	background-position: bottom left;
}
</pre>
<p>Как видите, в этом коде сам блок становится строчно-блочным, а для FF2 срабатывает свойство «-moz-inline-box», что придаёт ссылке фактически такие же свойства. «-moz-box-orient: vertical» понадобится в том случае, если внутри блока вам нужно поместить содержимое в несколько строк.</p>
<p>Также, хочу отметить, что для элемента <span> мы определяем относительное позиционирование и добавляем отрицательный нижний отступ размером с высоту кнопки, чтобы текст «подлез» под &lt;span&gt; с картинкой. Кстати, картинка спрайта прописывается как ссылке, так и спану. Мало ли что…</p>
<p>Если будут баги, пишите попробуем решить. А так, в моём случае работает в Internet Explorer 6, 7 и 8, Firefox 2 и 3, Opera, Safari, Chrome.</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2009/08/css-seleckis-method.zip'>Качем пример</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/seleckis-method-vs-pixy-s-method/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Min-width и max-width в IE6 с помощью expression</title>
		<link>http://seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression</link>
		<comments>http://seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression#comments</comments>
		<pubDate>Thu, 06 Aug 2009 08:52:17 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Брaузеры]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1690</guid>
		<description><![CDATA[Уже писали много раз, просто приведу свой код.
В JavaScript-файле размещаем такую функцию:

function width(min,max){
	w = document.documentElement.clientWidth;
	return (w = max) ? max + "px" : "auto");
}

Функция всего лишь принимает значения максимальной и минимальной ширины, проверяет текущую ширину документа и возвращает значение:

Если ширина документа меньше минимальной ширины, то возвращается минимальная ширина;
Если ширина документа больше максимальной ширины, то возвращается [...]]]></description>
			<content:encoded><![CDATA[<p>Уже писали много раз, просто приведу свой код.</p>
<p>В JavaScript-файле размещаем такую функцию:</p>
<pre lang="javascript">
function width(min,max){
	w = document.documentElement.clientWidth;
	return (w <= min) ? min + "px" : ((w >= max) ? max + "px" : "auto");
}
</pre>
<p>Функция всего лишь принимает значения максимальной и минимальной ширины, проверяет текущую ширину документа и возвращает значение:</p>
<ol>
<li>Если ширина документа меньше минимальной ширины, то возвращается минимальная ширина;</li>
<li>Если ширина документа больше максимальной ширины, то возвращается максимальная ширина;</li>
<li>Иначе ширина указывается автоматическая.</li>
</ol>
<p>Функция из CSS вызывается следующим образом:</p>
<pre lang="css">
div {
    width: expression(width(600,1000));

    /* далее для нормальных браузеров */
    min-width: 600px;
    max-width: 1000px;
}
</pre>
<p>600 и 1000 — минимальная и максимальная ширина. Поскольку expression работает только для IE, а min-width и max-width уже работают в IE7 и IE8, то этот CSS нужно изолировать и вынести в отдельный css-файл и подключить его с помощью условных комментариев, либо воспользоваться хакками, поскольку чтобы изменить значение придётся лезть в два файла, а не в один. Ну это уже как кому удобнее.</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2009/08/min-max-width.zip'>Скачайте пример</a> и убедитесь, что всё работает.</p>
<p>Минимальную ширину в IE 6 можно эмулировать с помощью приёма, в котором указывается правый border для контейнера шириной в необходимую минимальную ширину элемента, а элементу задаётся правый отрицательный margin равный той же минимальной ширине. При этом внутренний элемент должен быть либо плавающим (float), либо inline-block. В общем не читайте и не внимайте в эти последние предложения, а просто посмотрите <a href="http://www.cssplay.co.uk/boxes/width.html">пример на cssplay.co.uk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>«Резиновое» поле ввода в форме</title>
		<link>http://seleckis.lv/journal/css/rezinovoe-pole-vvoda-v-forme</link>
		<comments>http://seleckis.lv/journal/css/rezinovoe-pole-vvoda-v-forme#comments</comments>
		<pubDate>Fri, 31 Jul 2009 14:48:20 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1669</guid>
		<description><![CDATA[Как известно у полей ввода ширина не может рассчитываться автоматически относительно контейнера, как это работает у блочных элементов. Значение ширины можно задать фиксированное, либо относительное.
Есть сервисы в интернете с полями ввода (например, поиском) у которых ширина задана фиксированно. Соответственно, если шаблон сайта резиновый, то поле ввода растягиваться не будет. Как правило такие сайты имеют фиксированную [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно у полей ввода ширина не может рассчитываться автоматически относительно контейнера, как это работает у блочных элементов. Значение ширины можно задать фиксированное, либо относительное.</p>
<p>Есть сервисы в интернете с полями ввода (например, поиском) у которых ширина задана фиксированно. Соответственно, если шаблон сайта резиновый, то поле ввода растягиваться не будет. Как правило такие сайты имеют фиксированную вёрстку. К примеру, если вы зайдёте на «<a href="http://answers.yahoo.com">Yahoo Answers</a>» и с помощью Firebug (Firefox), Web Inspector (Safari, Chrome) или Developer Tools (Opera, IE8) отключите у элемента &lt;div id=&#8221;y-ks-whole-page&#8221;&gt; свойство «width: 750px;» в стилях, то сайт растянет на всю ширину, а поле поиска вопросов останется той же ширины. Конечно, кроме всего прочего, некоторые другие элементы останутся фиксированными, но мы говорим о полях ввода.</p>
<p>И вспомним работу студии Артемия Лебедева, поисковик «Яндекс» и его страницу <a href="http://ya.ru/">ya.ru</a> — облегчённую версию поисковика или посмотрим на давно забытый (мною) <a href="http://www.rambler.ru/">Рамблер</a>. Вёрстка как видите «резиновая» и соответственно ширина поля ввода для поиска такая же растягивающаяся.</p>
<p>Как же они сделали так, чтобы ширина была динамичной? Очень просто: таблицы. Создаётся таблица из одной строки и нескольких ячеек, в одной из которых помещается поле ввода и растягивается на всю ширину.</p>
<p style="text-align: center"><img title="yandex" src="http://seleckis.lv/wp-content/uploads/2009/07/yandex.gif" alt="yandex" width="600" height="127" /></p>
<p>Это простейший путь. Но не самый лучший.</p>
<h3>Вариант получше</h3>
<p>Начнём со структуры. особо наворачивать не будем. Чем проще, тем лучше.</p>
<pre lang="html4strict">
<div class="form">
<fieldset>
<input class="text-input" type="text" />
<input class="submit" type="submit" value="Continue →" />
	</fieldset>
</div>
</pre>
<p>Проще некуда. на самом деле можно было бы обойтись без лишнего div-а, если бы не Internet Explorer 6 и Firefox 2. Но об этом позже.</p>
<p>Перед описанием внешнего вида в CSS сначала нужно понять как предлагается решать задачу. Лучше всего показать схематически.</p>
<p style="text-align: center"><img src="http://seleckis.lv/wp-content/uploads/2009/08/input-variable.gif" alt="input-variable" title="input-variable" width="600" height="167" /></p>
<p>Из схемы видно, что предлагается контейнеру элементов формы добавить боковую границу шириной примерно равной кнопке отправки формы, а растягиваемое поле ввода предлагается растянуть на 100%. Ну и чтобы кнопка не перенеслась на следующую строку, контейнеру нужно запретить перенос строк.</p>
<pre lang="css">.form fieldset{
	border: none;
	border-right: 90px solid #fff;
	white-space: nowrap;
}
.form fieldset .text-input{
	width: 100%;
}</pre>
<p>Этого достаточно, чтобы форма правильно работала в Firefox 3, Opera, Safari, Chrome и Internet Explorer 8.</p>
<p>Для IE 6 и 7 нужно подправить отображение кнопки:</p>
<pre lang="css">.form fieldset .submit{
	overflow: visible;
}</pre>
<p>А для того, чтобы в IE6 и FF2 контейнер не растягивался так, что появляется горизонтальная прокрутка, нужно внешнему div-у прописать следующие свойства:</p>
<pre lang="css">.form{
	overflow: hidden;
	width: 100%;
}</pre>
<p>Вот и всё, теперь у вас есть бестабличная вёрстка растягивающегося поля ввода.</p>
<p><a href="http://seleckis.lv/wp-content/uploads/2009/07/input-variable.zip">Скачайте и посмотрите пример</a>. Он немного приукрашен.</p>
<p><strong>Пара нюансов:</strong></p>
<ul>
<li>Вам нужно точно знать ширину кнопки.</li>
<li>Для &lt;div class=&#8221;form&#8221;&gt; нельзя добавлять margin и padding по горизонтали, иначе будет сдвиг. Ну это вы и сами знаете.</li>
</ul>
<p>Конечно же, никто не мешает вам добавить и левую границу и с отрицательным отступом поместить что-нибудь перед полем ввода (например логотип Яндекса).</p>
<p>Собственно, это я расписывать не буду, а просто посмотрите <a href='http://seleckis.lv/wp-content/uploads/2009/07/input-variable-yandex.zip'>пример, как я сверстал ya.ru</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/rezinovoe-pole-vvoda-v-forme/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Строчная кнопка как кнопка submit</title>
		<link>http://seleckis.lv/journal/css/strochnaya-knopka-kak-knopka-submit</link>
		<comments>http://seleckis.lv/journal/css/strochnaya-knopka-kak-knopka-submit#comments</comments>
		<pubDate>Sat, 28 Feb 2009 11:17:50 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1577</guid>
		<description><![CDATA[Требуется создать строчную кнопку submit неопределённой ширины  с фоновой картинкой.
Почему это нельзя сделать стандартными средствами? Т. е. мы конечно можем поместить на страницу кнопку



и спокойно её использовать. Но нет, нам же этого мало. Нужно чтобы кнопочка была красивая, градиентная, с закруглёнными уголками.
Стандартным способом мы можем указать фон для кнопки, добавить рамочку и в браузерах [...]]]></description>
			<content:encoded><![CDATA[<p>Требуется создать строчную кнопку submit неопределённой ширины  с фоновой картинкой.</p>
<p>Почему это нельзя сделать стандартными средствами? Т. е. мы конечно можем поместить на страницу кнопку</p>
<pre lang="html4strict">
<input type="submit" value="Нажми меня" />
</pre>
<p>и спокойно её использовать. Но нет, нам же этого мало. Нужно чтобы кнопочка была красивая, градиентная, с закруглёнными уголками.</p>
<p>Стандартным способом мы можем указать фон для кнопки, добавить рамочку и в браузерах FF и Safari добавить закругления. Но проблема в том, что это во-первых не будет работать в IE и Opera, а во вторых, размеры кнопочек, положение текста и отступы везде будут разные.</p>
<p style="text-align: center"><img src="http://seleckis.lv/wp-content/uploads/2009/02/input-test1.png" alt="" title="input-test1" width="480" height="521" /></p>
<p>В FF2 вообще фон вылез за край закруглений.</p>
<p>Можно попробовать поместить кнопку submit в элемент span, чтобы использовать метод Sliding Doors. В этом случае можно будет без проблем поставить в качестве фона картинки как для элемента «span», так и для элемента «input». Но к сожалению и этот способ не подойдёт, поскольку нет возможности адекватно выровнять текст по вертикали.</p>
<p style="text-align: center"><img src="http://seleckis.lv/wp-content/uploads/2009/02/input-test2.png" alt="" title="input-test2" width="480" height="521" /></p>
<p>Поэтому если визуальное представление гораздо важнее чистоты html-кода, то можно воспользоваться следующим методом.</p>
<h3>Двойной «span» и элемент «input»</h3>
<p>За основу возьмём <a href="http://seleckis.lv/journal/ctrochnaya-knopka-kak-ssyilka">статью о создании кнопки как ссылки</a>. Поскольку в данном случае ссылка нам не нужна, то мы её заменяем на span, а внутрь второго span-а помещаем кнопку submit:</p>
<pre lang="html4strict">
<span class="input-button"><span>Кнопка как кнопка
<input type="submit" value="Кнопка как кнопка" /></span></span>
</pre>
<p>Принцип Sliding Doors сохраняется и картинки кнопки помещаются в эти два span-а. Не забываем и про то, что кнопка должна быть уровня inline-block.</p>
<pre lang="css">
.input-button {
	display: -moz-inline-box; /* только для FF2 */
	display: inline-block;
	height: 20px;
	vertical-align: bottom;
	*vertical-align: middle;	/* только для IE */
	background: #83af31 url(button-r.gif) no-repeat right top;
	cursor: pointer;
}
.input-button span {
	display: block;
	_display: inline-block; /* только для IE6 */
	line-height: 20px;
	padding: 0 10px;
	height: 100%;
	color: #fff;
	background: url(button-l.gif) no-repeat left top;
	overflow: hidden;
	position: relative;
}
</pre>
<p>С кнопкой submit мы сделаем хитро. Разместим кнопку с абсолютным позиционированием относительно span-а поверх текста и сделаем её прозрачной. В итоге мы получим красивую кнопку с возможностями элемента «submit», ширина которой варьируется относительно текста помещённого внутрь.</p>
<p style="text-align: center"><img src="http://seleckis.lv/wp-content/uploads/2009/02/button-scheme.png" alt="" title="button-scheme" width="410" height="138" /></p>
<p>Можно сделать размер больше, как изображено на картинке, но можно и 100% высоту и ширину. Код следующий:</p>
<pre lang="css">
.input-button input {
	position: absolute;
	top: 0;
	left: 0;
	height: 100%;
	width: 100%;
	cursor: pointer;
	opacity: 0;
	-moz-opacity: 0; /* видимо для старых версий FF */
	filter: alpha(opacity=0); /* только для IE */
}
</pre>
<p>Все методы представлены в этом <a href='http://seleckis.lv/wp-content/uploads/2009/02/css-inline-button.zip'>архиве</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/strochnaya-knopka-kak-knopka-submit/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Cтрочная кнопка как ссылка</title>
		<link>http://seleckis.lv/journal/css/ctrochnaya-knopka-kak-ssyilka</link>
		<comments>http://seleckis.lv/journal/css/ctrochnaya-knopka-kak-ssyilka#comments</comments>
		<pubDate>Mon, 02 Feb 2009 09:08:22 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1535</guid>
		<description><![CDATA[Урок-инструкция о том, как следует делать кнопки предназначенные для расположения внутри текста. Имеется в виду, что кнопка будет располагаться на базовой линии строки между словами. Вот так:

Если мы располагаем кнопку внутри текста значит это кому-нибудь нужно мы хотим на неё нажать. А для нажатия обычно используются такие виды элементов, как ссылка и кнопки формы.
В случае [...]]]></description>
			<content:encoded><![CDATA[<p>Урок-инструкция о том, как следует делать кнопки предназначенные для расположения внутри текста. Имеется в виду, что кнопка будет располагаться на базовой линии строки между словами. Вот так:</p>
<p style="text-align: center;"><img title="inline-button" src="http://seleckis.lv/wp-content/uploads/2009/01/inline-button.png" alt="" width="503" height="124" /></p>
<p>Если мы располагаем кнопку внутри текста значит <del datetime="2009-01-30T08:36:17+00:00">это кому-нибудь нужно</del> мы хотим на неё нажать. А для нажатия обычно используются такие виды элементов, как ссылка и кнопки формы.</p>
<p>В случае со ссылкой всё просто: помещаем среди текста ссылку и задаем ей фон. Но чтобы фон отображался и выравнивался корректно, ссылке следует добавить свойство:</p>
<pre lang="css">
.button {
	display: -moz-inline-box; /* только для FF 2 */
	display: inline-block;
}
</pre>
<p>Т. е. мы превращаем наш строчный элемент в строчно-блочный. Firefox 2 это свойство не поддерживает, поэтому указываем специальное специфичное свойство имитирующее строчный блок. Следующее за ним свойство предназначено для всех остальных браузеров. После этого можно задать фон для кнопки.</p>
<p>Что делать если нужно в качестве фона задать две картинки: левую и правую? Для так называемого эффекта «Sliding Doors», нужно как минимум два элемента.</p>
<p>Сначала я попробовал обойтись без лишнего элемента:</p>
<ul>
<li>:first-line — не подходит, поскольку предназначен для элементов заведомо блочного уровня, и Опера сразу же переносит все слова в несколько строк и у ссылки пропадает фон.</li>
<li>:first-letter — не подходит, поскольку в Опере работает только для элементов заведомо блочного уровня</li>
<li>:before или :after вместе с content: &#8221; &#8221; — не подходят поскольку внутренний отступ (padding) у строчных элементов по вертикали в браузере Firefox отличается от Opera и Safari, а если превращать вставленный контент в элемент блочного уровня, то Firefox не поддерживает для него плавающий режим (float), а inline-block в Firefox позиционируется со сдвигами по вертикали.</li>
</ul>
<p>Можно было бы использовать хаки, но кто гарантирует, что в других версиях браузеров они будут доступны? Единственное в чём я уверен, так это в необратимости работы хаков для IE 6 и 7 (Хотя мне недавно приснился сон, что IE 6 обновили, исправили ошибки и добавили табы…)</p>
<p>Псевдо-классы и псевдо-элементы я проверял только в браузерах Safari, Opera и Firefox 3. Если в них не удается правильно спозиционировать всё что я хочу, то в другие браузеры я даже не смотрю.</p>
<p>Итог: придется использовать дополнительный элемент.</p>
<pre lang="html4strict">

…laboris nisi ut aliquip
	<a href="#" title="Нажмите кнопку" class="button"><span>Кнопка как ссылка</span></a>
ex ea commodo consequat…
</pre>
<p>Решение в CSS:</p>
<pre lang="css">
p{
	line-height: 20px;
}
.button {
	display: -moz-inline-box; /* только для FF 2 */
	display: inline-block;
	background: #83af31 url(button-r.gif) no-repeat right top;
}
.button span {
	display: block; /* нужно для FF 2 */
	display: inline-block; /* для всех кроме FF 2 */
	padding: 0 10px;
	height: 100%;
	background: url(button-l.gif) no-repeat left top;
	cursor: pointer;
}
.button:link span, .button:visited span {
	color: #fff;
	text-decoration: none;
}
.button:hover span, .button:active span {
	color: #dfd;
	text-decoration: none;
}
</pre>
<p>Некоторые пояснения:</p>
<ul>
<li>Высота кнопки должна равняться высоте строки в этом тексте. Это обязательно, иначе будут проблемы с позиционированием картинок на фоне. Опять же, для корректного отображения фона в IE 7 следует для span тоже добавить высоту, можно равной высоте кнопки, а можно просто — 100% <em>(Примечание: это не связано с hasLayout)</em></li>
<li>Для внутреннего элемента, сначала во всех браузерах применится «display: block», а потом, во всех кроме FF 2 сработает свойство «display: inline-block». Первое свойство будет корректно работать в FF 2, а второе — в IE 6, остальным браузерам всё равно.</li>
<li>Добавлено свойство «cursor:pointer», чтобы в IE при наведении на кнопку курсор стал «указующим перстом».</li>
</ul>
<p>Развиваем тему…</p>
<p>Что если кнопке нужно добавить что-то вроде стрелочки, указующей куда-либо. Например вот так:</p>
<p style="text-align: center;"><img title="inline-button-active" src="http://seleckis.lv/wp-content/uploads/2009/01/inline-button-active.png" alt="" width="508" height="121" /></p>
<p>Во-первых, если делать для всех браузеров кроме IE, то лишний элемент добавлять не нужно, можно воспользоваться «:after» и вставить стрелочку таким образом:</p>
<pre lang="css">
.button span:after {
	content: " ";
	display: block;
	margin-top: -2px;
	width: 100%;
	height: 8px;
	background: url(button-arrow.png) no-repeat top;
}
</pre>
<p>Т. е. внутри элемента span, после текста вставляется абстрактный строчный элемент с пробелом в качестве содержимого, превращается в блочный элемент и чуть чуть поднимается вверх.</p>
<p>Схематически это можно изобразить так:</p>
<p style="text-align: center;"><img src="http://seleckis.lv/wp-content/uploads/2009/01/inline-button-after.png" alt="" title="inline-button-after" width="294" height="132" /></p>
<p>Но поскольку надо сделать так, чтоб работало и в IE тоже, то придется добавить ещё один лишний элемент, а кнопке стоит добавить дополнительный класс:</p>
<pre lang="html4strict">

…laboris nisi ut aliquip
	<a href="#" title="Нажмите кнопку" class="button active"><span>Кнопка как ссылка<b></b></span></a>
ex ea commodo consequat…
</pre>
<p>Позиционирование для добавленного элемента уже будет абсолютное и в CSS добавится следующий код:</p>
<pre lang="css">
.button.active {
	height: 20px;
	vertical-align: bottom; /* нужно для Opera */
	*vertical-align: baseline;	/* только для IE */
}
.button.active span {
	position: relative;
}
.button.active span b {
	display: block;
	position: absolute;
	left: 50%;
	top: 18px;
	margin-left: -7.5px;
	width: 13px;
	height: 8px;
	background: url(button-arrow.png) no-repeat top;
}
</pre>
<p>Итак, что же мы сделали:</p>
<ul>
<li>Для класса «active» добавили высоту, чтобы высота кнопки не увеличилась за счёт добавленного элемента.</li>
<li>Туда же добавили вертикальное выравнивание по низу, чтобы в Opera из-за дополнительного элемента не возникло сдвигов. Отменили выравнивание по низу для IE с помощью хака. Другим браузерам по барабану.</li>
<li>Для элемента span добавили «position: relative», чтобы абсолютное позиционирование стрелочки было относительно элемента «span».</li>
</ul>
<p>В <a href='http://seleckis.lv/wp-content/uploads/2009/01/inline-button1.zip'>готовом примере</a> описание элемента «b» и хаки для IE были вынесены в Conditional Comments. Т. е. код почти валидный, не считая свойства «-moz-inline-box» для Firefox 2.</p>
<p>Вариант с кнопкой «submit» и «button», ждите в следующей статье.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/ctrochnaya-knopka-kak-ssyilka/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Списки с разделителями между элементами</title>
		<link>http://seleckis.lv/journal/css/spiski-s-razdelitelyami-mezhdu-elementami</link>
		<comments>http://seleckis.lv/journal/css/spiski-s-razdelitelyami-mezhdu-elementami#comments</comments>
		<pubDate>Wed, 14 Jan 2009 09:34:27 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1526</guid>
		<description><![CDATA[Часто возникает необходимость создать список с разделительными линиями между элементами списка, Но как правило, в начале и в конце списка линий быть не должно или они должны быть другими. Как же сделать это с помощью CSS не создавая специального класса для первого или последнего элемента списка?
Всё очень просто, нужно всего лишь все элементы списка сдвинуть [...]]]></description>
			<content:encoded><![CDATA[<p>Часто возникает необходимость создать список с разделительными линиями между элементами списка, Но как правило, в начале и в конце списка линий быть не должно или они должны быть другими. Как же сделать это с помощью CSS не создавая специального класса для первого или последнего элемента списка?</p>
<p>Всё очень просто, нужно всего лишь все элементы списка сдвинуть на –1 пиксель, а контейнеру списка добавить свойство, скрывающее не помещающееся содержимое — overflow: hidden.</p>
<p>Пример:</p>
<pre lang="html4strict">
<div class="hlist">
<ul>
<li><a href="http://ru.wikipedia.org/wiki/RGB" title="RGB">RGB</a></li>
<li><a href="http://ru.wikipedia.org/wiki/CMYK" title="CMYK">CMYK</a></li>
<li><a href="http://ru.wikipedia.org/wiki/XYZ" title="XYZ">XYZ</a></li>
<li><a href="http://ru.wikipedia.org/wiki/HSV_(цветовая_модель)" title="HSV">HSV</a></li>
<li><a href="http://ru.wikipedia.org/wiki/HSL" title="HSL">HSL</a></li>
<li><a href="http://ru.wikipedia.org/wiki/RYB" title="RYB">RYB</a></li>
<li><a href="http://ru.wikipedia.org/wiki/LAB" title="LAB">LAB</a></li>
</ul>
</div>
</pre>
<p>Есть список цветовых моделей, которые нам необходимо расположить горизонтально и добавить к ним разделители.</p>
<pre lang="css">
.hlist ul {
	overflow: hidden; /* кроме скрытия первого разделителя, свойство не дает контейнеру захлопнуться. */
}
.hlist ul li {
	float: left; /* располагаем элементы горизонтально */
	border-left: 1px solid #ccc; /* создаем левую границу как разделитель */
	list-style: none; /* убираем маркеры */
	margin-left: -1px; /* сдвигаем влево на один пиксель, чтобы первый разделитель скрылся */
}
</pre>
<p>Из-за лишнего сдвига, расстояния слева и справа разделителя не равны. Для того, чтобы уровнять эти расстояния следует сделать внутренние отступы с разницей в один пиксель в пользу стороны сдвига:</p>
<pre lang="css">
	padding: 5px 16px 5px 15px;
</pre>
<p>Для того, чтобы механизм работал в IE, нужно включить для контейнера списка свойство <a href="http://www.satzansatz.de/cssd/onhavinglayout.html">hasLayout</a>. Я для этого использую HolyHack:</p>
<pre lang="css">
.hlist ul {
	height: 1%;
}
</pre>
<p>Для вертикальных списков делается примерно то же самое, только элементы сдвигаются вверх (margin-top). Также для элементов вертикального списка тоже нужно включить hasLayout, если они не имеют свойства «float: left».</p>
<h4>Важно!</h4>
<p>Механизм не будет работать, если контейнеру списка добавить внутренние отступы (padding), вернее, чтобы скрыть разделитель нужно будет сдвигать дополнительно на величину внутреннего отступа.</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2009/01/list-overflow1.html'>Пример верстки упомянутого механизма.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/spiski-s-razdelitelyami-mezhdu-elementami/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Графические маркеры у списков</title>
		<link>http://seleckis.lv/journal/css/graficheskie-markeryi-u-spiskov</link>
		<comments>http://seleckis.lv/journal/css/graficheskie-markeryi-u-spiskov#comments</comments>
		<pubDate>Wed, 19 Nov 2008 16:29:00 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1401</guid>
		<description><![CDATA[Не сказать, что это новшество, но поскольку часто спрашивают…
Такие простые вещи, которые, казалось бы, должны решаться на уровне браузера в итоге выглядят убого. Нет, в браузерах сделанных на совесть выглядит всё достаточно неплохо, но правда не гибко,  но Opera и IE располагает маркеры выше, чем нужно.

Все, кто знает об этих проблемах с маркерами, те забыли [...]]]></description>
			<content:encoded><![CDATA[<p>Не сказать, что это новшество, но поскольку часто спрашивают…</p>
<p>Такие простые вещи, которые, казалось бы, должны решаться на уровне браузера в итоге выглядят убого. Нет, в браузерах сделанных на совесть выглядит всё достаточно неплохо, но правда не гибко,  но Opera и IE располагает маркеры выше, чем нужно.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1407" title="list-style-image" src="http://seleckis.lv/wp-content/uploads/2008/11/list-style-image.png" alt="" width="600" height="202" /></p>
<p>Все, кто знает об этих проблемах с маркерами, те забыли CSS-свойство list-style-image и вместо него используют background-image или просто background.</p>
<p>Например:</p>
<pre lang="css">	background: url(marker.gif) 0 5px no-repeat;</pre>
<p>Результат:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1406" title="background-image" src="http://seleckis.lv/wp-content/uploads/2008/11/background-image.png" alt="" width="600" height="202" /></p>
<p>Если маркеры и прыгают, то примерно +/- 1px по высоте. Это гораздо лучший результат, чем было. Если можете предложить лучше — пожалуйста, предложите свой вариант. </p>
<p>Кроме того, что расположение картинки теперь более точное, есть возможность изменения её позиции относительно не только строки, но и всего элемента списка, если это требуется.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1409" title="background-alt" src="http://seleckis.lv/wp-content/uploads/2008/11/background-alt.png" alt="" width="385" height="269" /></p>
<p>Единственный минус — мы теряем свойство background для других нужд. Чтобы добавлять фон для каждого элемента списка требуется добавлять еще какой-нибудь элемент.</p>
<p><a href="http://seleckis.lv/wp-content/uploads/2008/11/graphics-markers.zip">Простой пример списков с графическими маркерами</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/graficheskie-markeryi-u-spiskov/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Закругленные углы без использования картинок</title>
		<link>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok</link>
		<comments>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok#comments</comments>
		<pubDate>Thu, 16 Oct 2008 10:44:53 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Технологии]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1289</guid>
		<description><![CDATA[Не мне вам рассказывать какая это проблема для верстальщика. Начиная от соблюдения семантики в написании HTML кода, продолжая валидностью в CSS и заканчивая подгрузкой JavaScript, все спотыкается об него — об Тот, про который не хочется не просто говорить, но, самое главное, видеть и знать, что он существует. Но начнем с самого хорошего.
Картинки против CSS
Когда [...]]]></description>
			<content:encoded><![CDATA[<p>Не мне вам рассказывать какая это проблема для верстальщика. Начиная от соблюдения семантики в написании HTML кода, продолжая валидностью в CSS и заканчивая подгрузкой JavaScript, все спотыкается об него — об Тот, про который не хочется не просто говорить, но, самое главное, видеть и знать, что он существует. Но начнем с самого хорошего.</p>
<h3>Картинки против CSS</h3>
<p>Когда можно обойтись инструкцией CSS — это самый лучший вариант. Достаточно написать border-radius: 5px и получим закругленные уголки с радиусом 5 пикселей. Но эта инструкция доступна только в браузерах поддерживающих CSS3.</p>
<p>Еще раньше были созданны собственные свойства у браузеров Mozilla Firefox 2 (-moz-border-radius) и Safari 3 (-webkit-border-radius) с аналогичным действием. Еще были слухи о мистическом -khtml-border-radius для Konqueror, но говорят, что это не работает. Корректно поддерживал закругленные уголки только Safari, когда как в Мозиле эти уголки выглядят ужасно — пиксельные, без сглаживания, они могли быть использованы только если цвета не слишком контрастные.</p>
<p>В Firefox 3 была реализована более правильная поддержка таких уголков. Они стали красивые, сглаженные.</p>
<p>Опера и IE никогда и не пытались это реализовать. О них и о некрасивых уголках в FF2 и пойдет речь в этом посте.</p>
<h3>Opera и SVG</h3>
<p>Opera, первый и единственный браузер, в котором была реализована поддержка использования SVG в качестве фона блока. Делается это довольно просто.</p>
<p>В отдельный файл (например bg.svg) пишем SVG-код и сохраняем. Это обычный текстовой файл, только с раcширением svg. В CSS для нужного нам блока прописываем фон:</p>
<pre lang="css">.block {
   background: url(bg.svg);
}</pre>
<p>Чтобы это были именно закругленные уголки, нужно в SVG-файле написать что-то вроде такого:<br />
<code><br />
&lt;svg xmlns="http://www.w3.org/2000/svg"&gt;<br />
&lt;rect stroke="#000" fill="#DDD" stroke-width="4" width="100%" height="100%" rx="15" ry="15" /&gt;<br />
&lt;/svg&gt;<br />
</code><br />
Атрибуты тэга <strong>rect</strong> меняйте как вам нужно.</p>
<p>В принципе, код не обязательно писать вручную, можно воспользоваться любым векторным редактором, который поддерживает экспорт в SVG.</p>
<h3>Firefox 2</h3>
<p><em>Пиксели, пиксели, пиксели&#8230; Они повсюду, они атакуют&#8230; Они напоминают времена DOS-овских игр&#8230;</em></p>
<p>Исправить можно. Опять же через SVG. Но поскольку FF2 не поддерживает SVG в качестве фона, то придется хитрить и добавить пару лишних блоков, один из которых будет являться внедренным объектом, а в другой будет помещено нужное нам содержимое. Таким образом object будет играть роль подложки.</p>
<p>Добавим позиционирование.</p>
<pre lang="css">/* внешний блок */
.block {
position: relative;
}</pre>
<pre lang="css">/* объект */
.block > object {
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
}</pre>
<p>В результате .content будет наложен на object.</p>
<p>Осталось придумать как это показать только FF2 и скрыть от других браузеров. В вашем распоряжении наверное только хаки.</p>
<h3>IE</h3>
<p>Много пелось диферамбов языку VML. Сколько статей о том, на сколько он лучше SVG. А в нашем случае все в основном предлагают использовать код такого плана:</p>
<pre lang="html4strict"><!--[if vml]><v:roundrect class="block" strokecolor="#000" strokeweight="4px" arcsize="0.15"><![endif]-->
<!--[if !vml]>-->
<div class="block"><!--<![endif]-->
Content of the block
<!--[if !vml]>--></div>

<!--<![endif]-->
<!--[if vml]></v:roundrect><![endif]--></pre>
<p>Да, вариант не плох. Разве что писанины много. Но есть тут один очень неприятный подводный камень.</p>
<p>Как вы заметили радиус углов задается атрибутом arcsize, куда записывается или некое дробное число или число процентов. Как это понимать?</p>
<p>Оказывается неутомимые редмондовские индусы придумали динамичное решение описав его такой ремаркой:</p>
<blockquote><p>Defines the rounded corners of a rounded rectangle as a percentage of half the smaller dimension of the length and width of a rectangle. 0% would have square corners, and 100% would form circular corners. A square with an ArcSize value of 1.0 would be a circle. The default value is 0.2 (20%).</p></blockquote>
<p>Перевожу: Определяет закругленные углы у прямоугольника как проценты от половины меньшего размера длины или ширины прямоугольника. Т. е. берется ширина или высота (что из них меньше, то и берется), делится пополам и высчитываются проценты от этой величины.</p>
<p>А теперь внимание вопрос: с какого укура нужно было быть, чтобы такое придумать?</p>
<p>Если у вас блоки будут определенной высоты и ширины, то подобрать оптимальные проценты закругления можно. Но если блок динамический, то при его разных размерах будут вычисляться разные радиусы углов. Это совершенно неприемлимо.</p>
<h3>Решение</h3>
<p>Вставляем внутрь блока два VML-блока, выставляем высоту в два раза большую нужного нам радиуса, радиус прописывам 1, и размещаем с абсолютным позиционированием один прямоугольник наверх, другой — вниз.</p>
<p>Тупое, но все-таки решение.</p>
<h3>И на сладкое</h3>
<p>Все это замечательно, но в любом из решений, в моем или каком-нибудь другом будут проблемы с границами, сдвигами, интервалами и размерами.</p>
<p>Я попробовал все выровнять, но использовал очень много хакков, и проверял в браузерах FF2, FF3, Safari 3, IE 6, IE 7, Opera 9.5. Не знаю в каких условиях, но где-то обязательно даст сбой. Так что, мой материал несет учебно-ознакомительный характер, а не руководство к использованию.</p>
<p><a href="http://seleckis.lv/wp-content/uploads/2008/10/rounded.zip">Пример закругленных уголков без использования картинок</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reset CSS</title>
		<link>http://seleckis.lv/journal/css/reset-css</link>
		<comments>http://seleckis.lv/journal/css/reset-css#comments</comments>
		<pubDate>Mon, 26 May 2008 12:09:27 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Шрифты]]></category>

		<guid isPermaLink="false">http://seleckis.lv/journal/css/reset-css</guid>
		<description><![CDATA[Написал свой Reset, который буду использовать в web-проектах. Конечно по мере исследований он будет дополняться. Раньше использовал известный ресет Эрика Мейера.
Итак:

html,body,address,blockquote,div,p,pre,h1,h2,h3,h4,h5,h6,hr,	/* блочные элементы */
dd,dl,dt,ul,ol,li,						/* списки */
a,abbr,acronym,b,big,br,cite,code,del,dfn,em,i,			/* строчные элементы */
ins,kbd,q,samp,small,span,strong,sub,sup,tt,var,		/* строчные элементы */
img,object,							/* картинки и объекты */
caption,table,tbody,td,tfoot,th,thead,tr,			/* табличные элементы */
input,textarea,select,button,form,fieldset,legend,label,	/* элементы формы */
u,font,s,center,dir,menu,strike,xmp				/* устаревшие элементы */
{
	margin: 0;
	padding: 0;
	vertical-align: baseline;
	text-align: left;
	text-indent: 0;
	font: normal 13px/20px "Lucida Grande","Lucida Sans [...]]]></description>
			<content:encoded><![CDATA[<p>Написал свой Reset, который буду использовать в web-проектах. Конечно по мере исследований он будет дополняться. Раньше использовал известный <a href="http://meyerweb.com/eric/thoughts/2008/01/15/resetting-again/">ресет Эрика Мейера</a>.</p>
<p>Итак:</p>
<pre lang="css">
html,body,address,blockquote,div,p,pre,h1,h2,h3,h4,h5,h6,hr,	/* блочные элементы */
dd,dl,dt,ul,ol,li,						/* списки */
a,abbr,acronym,b,big,br,cite,code,del,dfn,em,i,			/* строчные элементы */
ins,kbd,q,samp,small,span,strong,sub,sup,tt,var,		/* строчные элементы */
img,object,							/* картинки и объекты */
caption,table,tbody,td,tfoot,th,thead,tr,			/* табличные элементы */
input,textarea,select,button,form,fieldset,legend,label,	/* элементы формы */
u,font,s,center,dir,menu,strike,xmp				/* устаревшие элементы */
{
	margin: 0;
	padding: 0;
	vertical-align: baseline;
	text-align: left;
	text-indent: 0;
	font: normal 13px/20px "Lucida Grande","Lucida Sans Unicode",Lucida,arial,sans-serif;
	color: black;
	text-decoration: none;
	list-style-type: none;
}
</pre>
<p>Ну это стандартно, частично взято у Эрика. Перечисляются все возможные тэги. Первые пять строчек, я думаю понятны.</p>
<p>Шрифт я указываю явный, причём в пикселях. Я никогда не использовал em или проценты и долго терзал себя мыслью, что бедные, несчастные пользователи IE6 не смогут увеличить размер шрифта, а я такой нехороший не даю им такой возможности.</p>
<p>С некоторых пор я перестал комплексовать и больше не волнуюсь за пользователей IE6. Пусть сами за себя волнуются. Начнём с того, что если пользователи Недобраузера не могут поставить себе другой, более удобный и современный браузер, то я сомневаюсь в том, что они умеют в нём менять размер шрифта. Они будут щуриться, придвигаться поближе к монитору. Тем более, что в IE6 для этого нет горячих клавиш.</p>
<p>Совсем мои волнения угасли после прочтения статьи <a href="http://alistapart.com/articles/settingtypeontheweb">Setting Type on the Web to a Baseline Grid</a>, а точнее её перевода <a href="http://designformasters.info/posts/baseline-grid/">Базовая сетка в веб дизайне</a>.</p>
<blockquote cite="http://alistapart.com/articles/settingtypeontheweb"><p>
At some point as designers we have to strike a balance between creating pixel-perfect layouts and infinitely flexible ones. When you get down to it, resizable text is primarily an accessibility feature, not a design feature. Ideally it’s something that should be provided by the browser, no matter how the page is built, and in modern browsers it is. As long as all your content is readable and accessible at all sizes, it’s not necessarily true that the design must maintain integrity as you scale.</p></blockquote>
<p>И, собственно, перевод:</p>
<blockquote cite="http://designformasters.info/posts/baseline-grid"><p>
С другой точки зрения как дизайнеры мы должны стремиться к балансу между четкой вплоть до пикселя разметкой, и бесконечной гибкостью. Изменяемый размер шрифтов это элемент аксессибилити, а не дизайна, в идеале он должен поддерживаться браузером, не зависимо от того, как сделана страница, и многие современные браузеры так и поступают.
</p></blockquote>
<p>Использование шрифта Lucida Grande обусловленно переходом на MacOS и прочтением <a href="http://habrahabr.ru/blog/typography/42685.html">серии статей о веб-типографике</a>. Не волнуйтесь в IE6 он тоже замечательно отображается, правда только если размер больше 11px, ведь IE6 не умеет сглаживать шрифты, если это не включено для всей системы.</p>
<p>Lucida Sans Unicode — стандартный шрифт в Windows, который особо не используется, но по характеристикам схож с Lucida Grande. Затем идёт nix-овая версия Lucida. Ну а в случае если все три шрифта в системе не найдены, их заменит Arial или любой другой шрифт без засечек.</p>
<p>На самом деле, этот пункт самый настраиваемый в зависимости от проекта.</p>
<p>Идём дальше.</p>
<pre lang="css">
applet,iframe,embed {
	display: none;
}
</pre>
<p>Убираю с глаз долой устаревшие и нестандартные элементы.</p>
<pre lang="css">
hr,img,object {
	border: 0;
}
</pre>
<p>Границу убираю только у приведённых элементов. Элементы формы я, как видите, не трогаю, поскольку лучше все контролы оставить родными для браузера, чем устраивать на сайте винегрет. Например, поля ввода и кнопки можно стилизовать под сайт, а radio, checkbox, select, textarea, не получится. Если нужно стилизовать, например, поле для поиска, то лучше с ним работать отдельно.</p>
<pre lang="css">
input,button{
	overflow: visible;
}
</pre>
<p>Убрали лишние внутренние отступы у кнопок в IE.</p>
<pre lang="css">
input,select,button {
	vertical-align: middle;
}
</pre>
<p>Это сделано для того, чтобы все элементы формы, располагались по центру строки, а не скакали в разных браузерах на разных уровнях.</p>
<pre lang="css">
textarea {
	vertical-align: top;
}
</pre>
<p>А, поскольку высота textarea обычно больше одной строки, то пусть лучше он позиционируется по верху строки, тогда лейбл для этого поля всегда будет сверху.</p>
<pre lang="css">
select[size]{
	vertical-align: top;
}
select[size="1"] {
	vertical-align: middle;
}
</pre>
<p>А вот здесь применена небольшая хитрость. Поскольку select может быть как высотой в одну строку, так и больше, то нужно всем селектам имеющим атрибут size установить вертикальное позиционирование по верху. Ну а если какой-то селект имеет атрибут size, но его значение равно 1, т. е. его высота будет равна строке, то я возвращаю ему позиционирование посередине. К сожалению, в IE6 это не работает.</p>
<pre lang="css">
fieldset legend {
	*margin-left: -7px;
}
</pre>
<p>Нет я не использую хаки, просто для наглядности и чтоб покороче. Вставляйте в свой IE6-7.css (наверняка что-то подобное у вас есть) и инклудируйте с помощью Conditional Comments. У IE8 какое-то странное отображение legend, так что для него я ничего не делал.</p>
<p>Вообще у IE8 какое-то своё представление о vertical-align: middle для элементов формы. Такое ощущение, что по центру строки позиционируется базовая линия элемента формы, а не весь элемент.</p>
<pre lang="css">
caption,td,th,tr {
	vertical-align: top;
}
table {
	border-collapse: collapse;
}
</pre>
<p>Здесь думаю понятно.</p>
<pre lang="css">
optgroup {
	color: black;
	background: white;
	font-style: normal;
}
optgroup option {
	padding-left: 22px;
}
</pre>
<p>При использовании optgroup в Опере, почему-то у него чёрный фон и белые буквы. Исправляем этот бред.<br />
Убрать курсивное начертание удаётся только у Firefox. Это единственный браузер с настраиваемыми шрифтами и отступами в optgroup. Соответственно только для Firefox будет работать отступ в 22px (больше всего похожий на отступ в других браузерах).</p>
<pre lang="css">
hr {
	color: black;
	background-color: black;
	height: 1px;
	margin: 7px 0;
	*margin: 0;
}
</pre>
<p>Об этом я писал в <a href="http://seleckis.lv/journal/css/gorizontalnyiy-razdelitel-lt-hr-gt">предыдущей статье</a>.</p>
<pre lang="css">
ol li, ul li{
	vertical-align: bottom;
}
</pre>
<p>Заранее исправляем баг в IE если внутри элементов списка будут содержаться элементы с «display: block».</p>
<pre lang="css">
ol li{
	list-style-type: decimal;
}
ul li{
	list-style-type: disc;
}
</pre>
<p>Тоже понятно.</p>
<pre lang="css">
q { quotes: '\00AB' '\00BB' '\201E' '\201C'; }
q:before	{ content: '\00AB'; }
q:after		{ content: '\00BB'; }
q q:before	{ content: '\201E'; }
q q:after	{ content: '\201C'; }
</pre>
<p>Русские кавычки внешние и внутренние. Причём в дублированном виде, поскольку Safari перезаписывает quotes, с помощью q:before и q:after.</p>
<pre lang="css">
sub, sup{
	position: relative;
	font-size: 11px;
}
sub{
	top: 5px;
}
sup{
	top: -5px;
}
</pre>
<p>Этот метод позиционирования верхнего и нижнего индексов, на мой взгляд наиболее удобен, поскольку не будет происходить сдвига верхней и нижней строки.</p>
<p>Всё больше и больше убеждаюсь, что для каждого верстальщика и для каждого проекта reset будет свой. Что-то можно взять за основу, но по ходу дела и с накоплением опыта всё будет изменяться.</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2008/05/ns_resetcss.zip' title=''>Мой ресет одним файлом</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/reset-css/feed</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>Горизонтальный разделитель &lt;hr /&gt;</title>
		<link>http://seleckis.lv/journal/css/gorizontalnyiy-razdelitel-lt-hr-gt</link>
		<comments>http://seleckis.lv/journal/css/gorizontalnyiy-razdelitel-lt-hr-gt#comments</comments>
		<pubDate>Sat, 24 May 2008 13:00:43 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://seleckis.lv/journal/css/gorizontalnyiy-razdelitel-lt-hr-gt</guid>
		<description><![CDATA[Существует элемент &#60;hr /&#62;. Существует он для логического разделения блоков текста. Используется в том случае, если нужно разделить некоторый текст, а подзаголовок неуместен или необязателен. Именно поэтому следует использовать именно этот элемент, а не заменители, на подобие &#60;div class=&#8221;hr&#8221;&#62;&#60;/div&#62;
Всемирно известная проблема (я говорю об MS IE) отображает горизонтальный разделитель с дополнительными отступами, причём, такое ощущение, [...]]]></description>
			<content:encoded><![CDATA[<p>Существует элемент &lt;hr /&gt;. Существует он для логического разделения блоков текста. Используется в том случае, если нужно разделить некоторый текст, а подзаголовок неуместен или необязателен. Именно поэтому следует использовать именно этот элемент, а не заменители, на подобие &lt;div class=&#8221;hr&#8221;&gt;&lt;/div&gt;</p>
<p>Всемирно известная проблема (я говорю об MS IE) отображает горизонтальный разделитель с дополнительными отступами, причём, такое ощущение, что эти отступы прописаны ему на более низком уровне, не поддаваемом изменению с помощью css. Поэтому, чтобы сделать кроссбраузерные отступы у этого элемента, приходится идти на всяческие ухищрения.</p>
<p>Прочитав пару материалов по этому поводу (<a href="http://dimox.name/tag-hr-and-crossbrowser-margin/">Тег &lt;hr /&gt; и кроссбраузерный отступ</a>, <a href="http://www.robertnyman.com/2007/03/09/a-hard-challenge-styling-an-hr-element/">A HaRd challenge &#8211; Styling An HR Element</a>) и проанализировав, выяснил, что <strong>можно</strong> решить проблему кроссбраузерно.</p>
<p>Дмитрий Лялин, предлагал не лишать разделитель отступов, а наоборот, оставить, но везде сделать одинаковые. В теме <strong>A HaRd Challenge &#8211; Styling An HR Element</strong> предлагают убрать их вообще.</p>
<p>Собственно, получаем первое решение — без отступов:</p>
<pre lang="css">
hr {
	border: 0;
	color: red;
	height: 5px;
	background-color: red;
	display: block;
	margin: 0 !important;
	margin: -4px 0 -10px 0;
}
</pre>
<p>Заметьте, для исправления представления в IE6, я предлагаю вместо хакков и Conditional Comments использовать !important. Для всех браузеров кроме IE6 эта строчка будет приоритетной. А на следующей строчке можем написать исправление для IE6, который будет игнорировать !important.</p>
<pre lang="css">
margin: -4px 0 -10px 0;
</pre>
<p>эта строчка произвольная. Нет лекарства в виде какого-то точного значения. При изменении высоты строки, меняются и отступы в IE. И предлагаемый комментаторами в теме <strong>A HaRd Challenge &#8211; Styling An HR Element</strong> вариант -7px годится лишь для того, чтобы можно было использовать border для верхнего и нижнего элемента без залезания на разделитель. Мой вариант был для меня самым оптимальным для высоты строки 36px, с которой я экспериментировал.</p>
<p>display: block — предназначен для того, чтобы в IE6 сработал верхний отрицательный margin.<br />
color: red — чтобы границы в IE стали красными, а то они какие-то серенькие.</p>
<p>Но всё-таки осталась проблема — IE7. Он как и IE6 устанавливает для &lt;hr /&gt; отступ в 7px, но в отличае от IE6, он понимает свойства с флагом !important (правда только в standart mode. Если убрать doctype, то IE7 резко тупеет). Придётся использовать хакки или Conditional Comments. Последние предпочтительнее, например, потому что известный хакк для IE7:</p>
<pre lang="css">
*+html hr { ... }
</pre>
<p>работает и для IE8 для которого исправления не требуются.</p>
<p>Ещё одна проблема безотступного &lt;hr /&gt; — налезание тех самых 7 пикселов на следующий за ним блок в IE6 и IE7, что не позволяет использовать для этого блока border иначе граница выглядит слегка порубленной.</p>
<p>Вот что в итоге получилось:</p>
<div style="text-align: center"><img src='http://seleckis.lv/wp-content/uploads/2008/05/hr.png' alt='' /></div>
<p>Borders я добавил для наглядности, если их отключить — выглядит на порядок красивше.</p>
<p>В общем, если вам не нужны отступы или нужны, но менее 7px — используйте вышеприведённый пример, а если вы не против отступов у горизонтального разделителя от 7px и более, то используйте следующий вариант:</p>
<pre lang="css">
hr {
	border: 0;
	color: red;
	height: 5px;
	background-color: red;
	margin: 7px 0;
	*margin: 0;
}
</pre>
<p>*margin: 0 — хак для IE6 и IE7 который будет игнорироваться браузером IE8. Но лучше так не делать. Лучше все исправления записывать в отдельный файл и подключать с помощью Conditional Comments. Мало ли что&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/gorizontalnyiy-razdelitel-lt-hr-gt/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

