Тег <hr /> и кроссбраузерный отступ

Сколько себя помню, во время верстки я не особо любил использовать тег <hr />, выводящий горизонтальную линию, по причине того, что в браузере Internet Explorer по сравнению с другими современными браузерами отступы (CSS-свойство margin) отличаются.

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

На одном из англоязычных форумов я нашел информацию, которая гласила о том, что Internet Explorer делает размер отступа к тегу <hr /> больше ровно на 7 пикселей, чем другие браузеры.

Чтобы 100% убедиться в правдивости этих слов, я решил провести небольшой тест, который и подтвердил, что IE действительно добавляет к отступу от этого тега лишние ровно 7 пикселей.

Тест 1

Подготовлено специальное фоновое изображение с двумя линиями высотой в 7 пикселей и расстоянием между ними в 1 пиксель – место под линию, получаемую тегом <hr />. Для наглядность я поместил линию в div, которому указал границу серого цвета:

div#hr {
	border: 1px solid silver;
	width: 300px;
	background: url(hr-bg.gif) 100% 0 no-repeat;
}

Задаем для тега <hr /> отступ сверху и снизу в размере 7 пикселей (margin: 7px 0):

hr {
	margin: 7px 0;
	height: 1px;
	border: none;
	background: #F00;
	color: #F00; /* цвет линии в IE */
}

Результат в Opera, FireFox, Safari/Win:

Отступ у тега hr в браузерах, отличных от IE

В Internet Explorer 6 и 7 мы видим совсем другую картину:

Отступ у тега hr в браузере Internet Explorer

Тест 2

Теперь уменьшим отступ в браузере Internet Explorer на заявленные выше 7 пикселей путем создания дополнительного правила только для IE:

* html hr {margin: 0; /* для IE6 */}
*+html hr {margin: 0; /* для IE7 */}

В результате получаем одинаковый отступ у тега <hr /> во всех браузерах:

Отступ у тега hr в браузерах, отличных от IE

Данный метод сработает также и в том случае, если задать для IE отрицательный отступ (на случай, когда в браузерах, отличных от IE, необходимо установить тегу <hr /> отступ меньше 7 пикселей).

Таким образом, применив этот небольшой трюк, мы “укротили” Internet Explorer, заставив его правильно позиционировать тег <hr />, аналогично другим браузерам.

* * *

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

Комментарии (26)

  1. 7 февраля 2008 г. в 12:14

    Конечно, более семантично использовать hr – специлизированный тег.
    Однако из-за разницы отображения в разных броузерах hr — не самый любимый мой тег (впрочем посмотрим).
    css-ом можно поставить костыли и хаки (которые паталогически не люблю) или решить вопрос по-иному. Семантика при этом не страдает.
    навскидку – такие варианты (для контентных блоков): использовать :first-child (доп. классы не нужны, а вот с ИЕ “как обычно”)
    программно для первого элемента задать класс border и последнему не задавать (или прописать всем контентным блоком бордер и отбивку наверху, а первому noborder)
    ps> программно – js или серверным языком(php,asp и т.д.) — это то же костыль и разведение программного мусора
    pps> пустой разделительный див – это, конечно, ппц. такое я делал год-два назад. каюсь.

  2. ElaSTiC
    7 февраля 2008 г. в 13:19

    Зачем изобретать велосипед? Есть масса способов избавиться от этого тега методами css.

  3. 7 февраля 2008 г. в 14:05

    ElaSTiC какой здесь может быть велосипед, если hr – это стандартный хтмл-тег, предназначенный для вывода горизонтальной линии?

  4. 7 февраля 2008 г. в 14:15

    Интересно, Билл Гейтс пользуется своим IE? )))

  5. Yuriy
    7 февраля 2008 г. в 15:18

    Dimox, обычно обнуляю у всех элементов padding и margin, это ж обычная практика, и никаких проблем.

  6. 7 февраля 2008 г. в 16:13

    Еще как вариант использовать отрицательный маргины. Yuriy, в ie обнуление для hr не срабатывает.

  7. 7 февраля 2008 г. в 20:48

    Я не успел… lusever сказал то, что я хотел сказать про IE.

  8. Amiego
    9 февраля 2008 г. в 12:16

    То есть проблема некорректного отображения в ИЕ решается таким образом? Вы мой спаситель!!!

  9. 9 февраля 2008 г. в 12:52

    Amiego, да, именно таким образом и решается.

  10. Саша
    9 февраля 2008 г. в 16:47

    А как зделать так что бы допустим от центра 50 пикселей отступить ?
    а то с помоощью етих кодов не получается у меня !

  11. 9 февраля 2008 г. в 18:28

    Саша, если имеете в виду горизонтальные отступы, то делается это следующим образом:

    hr {margin: 0 50px;}

  12. rss читатель
    9 февраля 2008 г. в 23:51

    Добавил в избраное, очень полезная инмормация, потому как я один из немногих кто использоует повсемесно

  13. 10 февраля 2008 г. в 01:24

    ДИВАН, под инновационными технологиями вы что конкретно подразумеваете?

    rss читатель, на здоровье ;)

  14. 12 февраля 2008 г. в 22:26

    Спасибо за советы! Сделать что-то кроссбраузерно – это не так просто!

  15. vv
    27 апреля 2008 г. в 18:25

    а как на счет такого решения:
    hr, .hr { background-color: red; height: 1px; overflow: hidden; }
    hr { behavior: expression( this.outerHTML = ” ); }

    тогда можно задавать любой margin: 1em – например

  16. autologo
    13 июня 2008 г. в 18:07

    Спасибо! Выручил, но в ИЕ я все таки переделал на дивы

  17. Андрей
    12 ноября 2008 г. в 22:39

    Здравствуйте уважаемый, интересует такой вопрос:
    в чем заключается разница между “hr” и “hr /” ?

    сюдаже:
    a href=”ссылка”>
    a href=”ссылка” />
    a href=’ссылка’>
    a href=’ссылка’ />
    a href=ссылка>
    a href=ссылка />

    ?

  18. 12 ноября 2008 г. в 23:19

    Андрей, в соответствии с XHTML-стандартном все непарные теги должны содержать в конце слеш через пробел.

  19. 28 января 2009 г. в 15:54

    Лично я использую hr (хоть и редко) в качестве разделителя или пустого дива со стилем clear: both.
    При этом, как правило я скрываю эту линию, а границы задаю дивам через border.
    Что касается “высоты” hr, то выяснилось, что она в какой-то мере зависит от font-size текста, в котором находится. Так например, если задать hr однопиксельный font-size (и line-height для верности), то ненужные отступы исчезают.

    1. 28 января 2009 г. в 16:29 / ответ на коммент Максим

      А можно сделать и без указания размера шрифта:

      hr {
        height: 1px;
        oveflow: hidden;
      }
      
      1. kapyceJlb
        14 февраля 2011 г. в 16:25 / ответ на коммент Dimox

        Меня верхний margin не нравиться. Хотя если подымать просто вверх её и -14 снизу. хмм….. сейчас попробуем ))

  20. Дархан
    6 марта 2009 г. в 20:10

    Спасибо Максиму. Такую мелочь исправил, но все равно приятно )

Ваш комментарий

Жирный текст

Ссылка

Цитата

Внутристрочный код

CSS-код

HTML-код

JavaScript-код

PHP-код