Главная » CSS, Веб-разработка, Статьи и переводы

20 CSS-решений распространенных багов и проблем при верстке сайта

17 Июнь 2008 просмотров 10,705 комментариев 39


Спонсор месяца:
Сайт о CSS и верстке сайтов


Ресурс noupe.com опубликовал интересную подборку CSS трюков, в которой рассказывается более чем о 20 способах решения различных проблем и багов при верстке сайта с помошью CSS. Это первая часть из серии о CSS-трюках, поэтому я буду следить за обновлениями и переводить для вас самые интересные и актуальные решения.

Баги IE

1. Двойной внешний отступ элемента (IE Double Margin Float Bug) – у блочного элемента с прописанными правилами margin и float в IE наблюдается интересный баг: значение отступа margin увеличивается в 2 раза.

IE Double Margin Float Bug

BUGFIX: Пропишите для элемента значение display:inline.

2. “Обертывание” в блочной модели. (Overcoming the Box Model Hack) – способ предназначен для решения проблемы отображения блоков с прописанной шириной и отступами: в IE padding не плюсуется к ширине блока.

BUGFIX: Указывайте все необходимые отступы в родительском или внутреннем элементе блока. Т.е. вместо:

#main-div{
width: 150px;
border: 5px;
padding: 20px;
}

Используйте:

#main-div{
width: 150px;
}
#main-div div{
border: 5px;
padding: 20px;
}

3. Игнорирование IE6 правила min-height. (В IE7 проблем нет).

BUGFIX:

Для браузеров понимающих праивло min-height:

.container {
width:20em;
padding:0.5em;
border:1px solid #000;
min-height:8em;
height:auto;
}

Для IE6:

/*\*/
* html .container {
height: 8em;
}
/**/

4. Игнорирование IE правила. Задача решается с помощью нехитрого “оберточного” способа:

BUGFIX:

HTML:

например, ширина блока 960px

CSS:

* html .ie_minwidth {
border-left: 960px solid #fff; /*ширина блока*/
position:relative;
float:left;
}
* html .inner {
margin-left: -960px; /*ширина блока*/
position: relative;
float:left;
}

И не забываем о правильном доктайп, к примеру:



Центрирование

5. Центрирование блока относительно body.

body{
text-align: center;
}
#container
{
text-align: left;
width: 960px;
margin: 0 auto;
}

6. Центрирование по вертикали. Самое простое решение – указать для внутреннего элемента блока значение line-height.

#wrapper {
width:530px;
height:25px;
background:url(container.gif) no-repeat left top;
padding:0px 10px;
}
#wrapper p {
line-height:25px;
}

Центрирование по вертикали

Проблемы с позиционированием элементов

7. Решение проблем позиционирования многоколоночных шаблонов и элементов

Статья “Равноудаленные элементы” в моем блоге.

Проблемы с позиционированием элементов

8. Баг 2х колоночного шаблона в IE (The Expanding Box Bug) – верстая 2х колоночный макет, в IE вы увидите разрыв колонок из-за фиксированной ширины блока и позиционирования относительно родительского блока. Несколько способов решения этой проблемы описаны в статье.

The Expanding Box Bug

Понимание CSS позиционирования

9. О CSS позиционировании и не только об этом, подробно описано в статье Understanding CSS Positioning part 1 , и в продолжение ее Part2, Part3. Вы найдете не только ответы на разнообразные проблемы позиционирования, но и откроете новые возможности CSS3.

CSS позиционирование

10. В чем разница между значениями relative и absolute в позиционировании?- Если вы новичок, то наверняка вы задавались этим вопросом. Ответ вы найдете в указанной статье и путаницы больше не возникнет.

#redSquare
{
position: relative;
bottom: 40px;
right: 40px;
}

И мы получим:

разница между значениями relative и absolute

11. HangTab – небольшой CSS код, который поможет реализовать на вашем сайте “стикеры” в любом месте страницы.

#hang_tab {
position: absolute;
top: 7px;
left: 0px;
width: 157px;
height: 93px;
}

стикеры

CSS-концепция “плавающей” модели верстки

12. Теория плавающей модели верстки на CSS от SmashingMagazine охватывает несколько статей, посвященных “плавающей” модели, т.е. свойству float.

Some content
Text not inside the float

13. Floatutorial – еще одна статья, посвященная плавающей модели. В ней вы сможете узнать об основах модели и посмотреть примеры верстки различных элементов.

14. Очищаем float-привязку к элементам – в статье описан небольшой CSS-код (EasyClearing), котрый поможет вам решить проблему привязки элементов, имеющих свойство float.

/* EasyClearing http://www.positioniseverything.net/easyclearing.html */
#container:after
{
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
#container
{display: inline-block;}
/* Hides from IE-mac \*/
* html #container
{height: 1%;}
#container
{display: block;}
/* End hide from IE-mac */

Очищаем float-привязку к элементам

Простые способы закругления краев блока

15. Закругленные края с помощью фонового избражения – в случае с фиксированными размерами блока актуально будет решение от CSS Guy:

HTML:

beautifully-encapsulated paragraph

CSS:

.roundBox {
background:transparent url(roundBox.gif) no-repeat top left;
width:340px;
padding:20px;
}
.roundBox .boxBottom {
background:white url(roundBox.gif) no-repeat bottom left;
font-size:1px;
line-height:1px;
height:14px;
margin:0 -20px -20px -20px;
}

Интересна так же и техника, которая используется в Google Analitics – в каждый угол блока помещается пиксельное изображение 1х1, создавая эффект закругленного края. Пример техники можно увидеть здесь.

Закругленные края с помощью техники Google Analitics

16. 3 простых шага при верстке шаблона с закругленными элементами от Alen Grakalic. Пример можно увидеть здесь.

3 простых шага при верстке шаблона с закругленными элементами

Полезные ссылки по теме:

Генератор закругленных краев

Закругление углов у изображения

Верстка форм на CSS

17. Основные пункты, на которые стоит обратить внимание при верстке форм от Cris Coyer. Он предлагает использовать элементы label, псевдо-классы и др. В качестве примера он приводит свою форму – Nice & Simple Contact Form

label {
float: left;
text-align: right;
margin-right: 15px;
width: 100px;
}

Nice & Simple Contact Form

18. Красивый чистый код формы на CSS – статья иллюстрирует хороший пример крда формы на CSS без использования лишних таблиц. Код можно взять здесь.

Красивый чистый код формы на CSS

19. Автозаполнение полей ввода на JavaScript. Иногда нам необходимо объяснить пользователю, что ему необходимо написать в поле ввода. Обычным решением является написание лейбла для поля в самом поле ввода. В указанной статье приведен хороший пример реализации автозаполения поля с использованием JS кода. Мы делаем элемент лейбл невидимым и копируем значение title нашего поля в value. Если JS отключен, то лейбл будет отображен над полем ввода текста, value которго остается пустым. Пример можно посмотреть здесь.

Экспериментируем с CSS: интересные трюки

20. Кроссбраузерный разделить hr с фоном.

div.hr {
background: #fff url(myhrimg.gif) no-repeat scroll center;
height: 10px
}
div.hr hr {
display: none
}

Блогун

Комментариев 39 »

  • ]]>spawn пишет: ]]>

    отличная статья, спасибо!  

    Цитировать

  • ]]>Мир CSS пишет: ]]>
  • ]]>kot пишет: ]]>

    полезная статься. Спасибо  

    Цитировать

  • ]]>Илья пишет: ]]>

    Присоединяюсь.
    Узнал много полезного.
    Спасибо за подборку.  

    Цитировать

  • ]]>Вебмастерок пишет: ]]>

    Вот большое человеческое спасибо за 15 пункт (где про закругления). Сидел маялся с одним сайтом, получалось нагромождение таблиц и проч. лишних вещей. Реально простое решение, век живи век учись как говорится..  

    Цитировать

  • ]]>ретро_0йд пишет: ]]>

    Тоже вот учусь CSS :)
    как писали на блоге-блоге, это действительно полезный блог! :))  

    Цитировать

  • ]]>Godor пишет: ]]>

    Отличный матерьяльчик. Мне токашо помог ;)  

    Цитировать

  • ]]>azimsky пишет: ]]>

    Спасибо за обзор!
    Ссылки на сайты в примерах 16 и 17 ведут в одно и то же место (форму – Nice & Simple Contact Form)  

    Цитировать

  • ]]>Tutta пишет: ]]>

    Задайте разный цвет фона для HTML и BODY.е
    Положите в BODY единственный DIV c margin-top:50px;
    Посмотрите, что случилось с BODY, (которвый вы не трогали) в IE и в “стандартном” браузере.
    Начните новую рубрику багов мозгов W3C.

    Всё в Веб-разработке – есть относительно базы, с которой вы начинаете вашу работу. Если вы отталкиваетесь от логики ИЕ, то ФФ имеет кучу багов. Если вы начинаете работу отталкиваясь от мнения W3C, то ИЕ- “Кошмар на улице Вязов”.

    Не путайте метры с килограммами.
    Есть 2 НЕобязательных стандарта – это MS и W3C.
    Это похожие, но РАЗНЫЕ стандарты ВЕБ.
    W3C стандарт рекомендательный, и потому, собственно, стандартом не является !!!!!!
    Ни юридически и ни фактически консорциум не имеет прав считать свою логику – СТАНДАРТОМ. Это лишь общественная организация. И всё!

    Стандарт консорциума создавался ИСКЛЮЧИТЕЛЬНО против монополии MS !!
    И поэтому, не предубежденный разработчик видит в нём множество извращений нормальной человеческой логики.
    Никакой паддинг не сделает ваш монитор большим по размеру :-)  

    Цитировать

  • ]]>Автор пишет: ]]>

    W3C пишет спецификации, на основе которых браузеры решают как тот или иной элемент будет работать согласно их рекомендациям. Валидность пока никто не отменял, не смотря на то, что это всего лишь рекомендации. Браузер выдает ошибки CSS как раз согласно W3С, так что… Доктайп имеет смысл.  

    Цитировать

  • ]]>Tutta Karlsson пишет: ]]>

    В предыдущем посте я хотела указать на “логический” баг стандарта. Т.е. не делаем из стандарта W3C идола.

    К моему примеру:
    DOCTYPE – любой на ваш вкус.
    HTML, BODY {width:100%, height:100%}
    Но цвет фона задать обязательно различным для этих элементов страницы.
    Единственный блок DIV, помещенный на страницу с margin-to:50px; [любая цифра], “стандартно” срывает ни в чем не повинный BODY со своего места.
    Это по стандарту – эффект вываливания границ.

    Решение проблемы:
    1. Задать верхний внутр. отступ для BODY, наприме, padding:1px; .
    О, все хорошо – как и задумывалось, все на своих местах. Но, черт возьми, зачем мне этот некстати появившийся скролл??
    2. Обернуть DIV в фантик из ещё одного DIV. Это аналогично BugFix №2 статьи.

    Резюме – стандарт W3C в реализации CSS2 далёк от совершенства и имеет свои пороки т.н. “логические баги”. Т.е. он имеет быть плохо приспособленным к некоторым очевидным задачам вебмастера. И в особенности, когда речь идет о “резине”.

    Я могла бы продолжить примеры, когда стандарт обыгрывает плохую шутку с веб-разработчиками. Да вы и сами их знаете. Не раз вам попадались сайты с “двойным текстом” , когда один контент лежал поверх другого и это безо всякого абсолютного позиционирования в стилях. Таково правило стандарта!
    Но оно не прозрачно и не очевидно и следовательно, вебмастер может не сразу заметить скрытый подвох стандарта.
    Сайт уже на движке, шаблонизирован и слит в БД. Секретарша набивает контент для сайта фирмы и о.. сорри, конфуз – в раскладке не учтено, что контент может быть другим и т.п. … текст лежит на тексте или еще на чем.

    Это и есть “логические баги”.
    Когда для человека очевидно, что сначала обувается ботинок, а потом завязываются шнурки. Но стандарт требует начинать завязывать шнурки, а потом одевать ботинок. Это и есть “логический баг” стандарта. Со временем большинство привыкает следовать стандарту, и готово ради него (стандарта) совершить аутодафе с любым еретиком.
    Ибо стандарт W3C – “священное писание”!!!

    Я считаю, что стандарты W3C не только можно, но и нужно обсуждать и подвергать критике. Ибо нам с ним работать.

    _____________________________________
    Никакой паддинг не увелит размер вашего монитора :-)  

    Цитировать

  • ]]>Tutta Karlsson пишет: ]]>

    ЗЫ {P.S.]
    Если речь в статье о багах веб-верстки как таковых, то почему бы не упомянуть о бо ВСЕХ багах?
    А не только о длинных ушах “ослика ИА”?  

    Цитировать

  • ]]>Автор пишет: ]]>

    Дело вовсе не в стандарте. Дело в том КАК разработчик браузера понимает этот стандарт. Это уже совсем другой разговор. Стандарт – один для всех, но как вы правильно заметили, он носит рекомендательный характер. Именно поэтому каждый интерпретирует его по разному (я о браузерах). W3C тут ни причем. Идеальное решение было бы собраться всем разработчикам браузеров и сделать _единую поддержку_ предлагаемых стандартов. А интерфейс самого браузера – это уже их личное дело.  

    Цитировать

  • ]]>Автор пишет: ]]>

    Потому что ослик вымирающий вид. Иначе зачем IE7, IE8 гоняться за стандартами?  

    Цитировать

  • ]]>Tutta Karlsson пишет: ]]>

    Т.е. “логические” баги W3C не обсуждаются.
    Это табу?  

    Цитировать

  • ]]>Tutta Karlsson пишет: ]]>

    Да. Очень похоже.
    Очень многое от MS стало стандартом в HTML, JS и CSS[W3C]. Что-то не прижилось и вымерло. То же у NN произошло с “LAYER”.

    Но ведь главный строительный материал веб-верстки – блок DIV это же дитя IE !!!!

    Согласна полностью, сто нужно не вести войну стандартов между MS и W3C, а взять, как обычно, лучшее у MS.  

    Цитировать

  • ]]>Tutta Karlsson пишет: ]]>

    P.S.
    У ФФ, Оперы и др. “не ИЕ” багов нет?
    Потому что не может быть никогда?  

    Цитировать

  • ]]>Автор пишет: ]]>

    Почему же, и W3C не ангел :) Но браузеры делают все так как они пишут, так уж лучше пусть делают одинаково для всех.  

    Цитировать

  • ]]>Автор пишет: ]]>

    Смотря как посмотреть. Если вы верстаете под IE, то FF и Опера для вас имеют баги. Если верстаете под FF, то баги имеет IE. Но как правило, популярен именно второй вариант. А разницы между FF и Оперой практически нет.  

    Цитировать

  • ]]>hellveen пишет: ]]>

    Отличный материал! В обязательном порядке – в делишес, на полку)  

    Цитировать

  • ]]>Alexandra пишет: ]]>

    “6. Центрирование по вертикали. Самое простое решение – указать для внутреннего элемента блока значение line-height.”

    Это конечно никакое не решение проблемы. Подходит исключительно для случая, если нужно отцентрировать одну строку, да и то такую, которая целиком влезет по ширине в блок-контейнер.  

    Цитировать

  • ]]>Автор пишет: ]]>

    Это “самое простое” решение :)  

    Цитировать

  • ]]>Vampire пишет: ]]>

    >К моему примеру:
    >DOCTYPE – любой на ваш вкус.
    >HTML, BODY {width:100%, height:100%}
    >Но цвет фона задать обязательно различным для этих элементов страницы.
    >Единственный блок DIV, помещенный на страницу с margin-to:50px; [любая >цифра], “стандартно” срывает ни в чем не повинный BODY со своего места.
    >Это по стандарту – эффект вываливания границ.

    ммм… простите, не совсем понял… где здесь “нарушение” логики?

    [code]

    html, body {width:100%, height:100%}
    body{background:yellow;}

    test

    [/code]  

    Цитировать

  • ]]>Vampire пишет: ]]>

    > Стандарт консорциума создавался ИСКЛЮЧИТЕЛЬНО против монополии MS !!

    Ну начнем с того, что консорциум был создан в 1994 году
    А винда95 вышла в соответствующем году. К тому моменту – микрософт успешно профакал рынок www.
    Так что консорциуму было глубоко до одного места касаемо монополии MS
    А то что MS начав разрабатывать свои браузеры не прислушалась/ не присмотрелась к стандарту W3C – так на то он и MS – загордились, затупились, …  

    Цитировать

  • ]]>acid пишет: ]]>

    Для IE6 есть атрибут min-height, вот только назвали его height :)
    Если для ie6 задать height то при увеличении содержимого блока, он все-равно будет увеличиваться его высота.
    Проблему можно решить более элегантно:

    .block {
    min-height: 100px; /* для нормальных браузеров*/
    height: auto !important; /* ie6 понимает important, поэтому это свойство перекроется */
    height: 100px; /* подействует только для ie6, все остальные прочитают height: auto последним */
    }  

    Цитировать

  • ]]>mongoose пишет: ]]>

    Неплохая подборка в одном месте  

    Цитировать

  • ]]>Вячеслав пишет: ]]>

    вы провобоали height задать для Div’a ?
    содержимое либо будет вываливаться из блока, либо пропадет вовсе  

    Цитировать

  • ]]>WarGot пишет: ]]>

    Отличнейшая статья!!!
    Спасибо!”!  

    Цитировать

  • ]]>почта пишет: ]]>

    Кстати оочень часто встречаю баг 2х колоночного шаблона в IE , как по мне самая распространенный…  

    Цитировать

  • ]]>SelenIT пишет: ]]>

    В этом коде другая тонкость: если указать фон только для BODY, то для страниц, отдаваемых как text/html, он распространяется на HTML. Это стандарт, но корни у него исторические, для application/xhtml+xml такого не происходит (тоже не очевидно и не вполне логично, имхо;). Поэтому для демонстрации проблемы и нужно явное задание цвета и для html, и для body.  

    Цитировать

  • ]]>Snowcore пишет: ]]>

    Для описания всех багов и недостатков IE могут уйти годы…  

    Цитировать

  • ]]>Доктор Портфолиус пишет: ]]>

    Советы полезные, спасибо. Действительно, часто приходится сталкиваться с подобыми задачами, и, сведенные все воедино в рамках одной статьи они полезны для всех.  

    Цитировать

  • ]]>WebFlakeStudio пишет: ]]>

    Отличная подборка!
    @Snowcore: а по поводу IE вы правы! :-)  

    Цитировать

  • ]]>PanaySergey пишет: ]]>

    Для того, чтобы большинства проблем с отображениями не возникало, советую использовать CSS-обнуление)  

    Цитировать

Комментарии

Добавьте ваш комментарий, или трекбэк с сайта. Вы также можете подписаться на комментарии к этой статье через RSS.

Вы можете использовать теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Чтобы получить аватарку, зарегистрируйтесь на Gravatar.