Строительство домов по канадской каркасной технологии, строительство домов в Киеве - Будинок у задоволення

Необходимость выровнять какой-то блочный элемент по центру является не редкой в повседневной работе верстальщика. Многие начинающие верстальщики спотыкаются об то, что css-свойство text-align:center; для родительского элемента приводит к выравниванию блока по центру только в Internet Explorer , в других браузерах это не приносит ожидаемого результата. Это связанно с тем, что во всех браузерах, кроме Internet Explorer, свойство text-align:center применяется только к строчным элементам. Подробней о том какие элементы относяться к строчным и в чем их особенность можно прочитать в заметке «Строчные – inline и блочные – block-level элементы«

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

Вариант 1 (align=”center”)

Суть метода в том, что родительскому блоку (тому, в котором нужно выровнять блок по центру) присваивается атрибут align=”center”. Этот атрибут указывает на то, что все содержимое блока должно быть выровнено по центру. Результат метода удовлетворяет ожидания. Недостатком является то что все содержимое всех внутренних блоков также будет выровнено по центру, тоесть прийдеться внутренним элементам переопределять выравнивание. Другим недостатком является то, что атрибут align недопустим при строгой(Strict) разметке (подробней о типах разметки можно прочитать в заметке «Сага о doctype») что приведет к не прохождению валидации.

Вариант 2 (margin: 0 auto;)

Этот метод метода выравнивания div по центру является более эффективным, чем предыдущий. Метод основан на том, что блоку, который нужно выровнять по центру применяется css-свойство margin:0 auto;. Метод основан на сокращенно представлении свойства (подробней читай в заметке «Сокращения при написании CSS»). Таким образом, если необходимо будет еще добавить только отступ сверху необходимо изменить на margin:10px auto 0; или на margin:10px auto; если отступ нужен сверху и снизу.

Вариант 3 (позиционирование и отрицательный отступ)

Для того чтоб выровнять блок по центру можно еще воспользоваться этим способом выравнивания блока по центру. Он заключается в том, что блок позиционируется в родительском элементе и потом сдвигается влево на 50%, но таким образом элемент будет размещен не совсем по центру и для того чтоб это изменить блоку присваивается отрицательный левый отступ равный половине ширины блока чтоб четко выровнять его по центру. Главное в этом методе не забыть присвоить блоку позиционирование.


.example3 {
    position:relative;
    left:50%;
    margin-left:-100px;
    width:200px;
    background:#FF6666;
    border:1px solid #FF0000;
}

Вариант 4 (Процентное соотношение)

Если блок, который нужно разместить по центру, имеет ширину в процентах можно воспользоваться этим легким способом выравнивания блока по центру. Метод заключается в том, что блоку применяются боковые отступы равные половине ширины, оставшиеся от 100% после отнятии ширины блока. Скажем, если есть блок шириной 40%, то боковые отступы нужно сделать по 30% и тогда блок будет сцентрированный.

Резюме

Выбор способа выравнивания зависит от контекста решения проблемы и предпочтения верстальщика. Все представленные методы полностью кроссбраузерны.

Реализация методов

Tags: ,

72 Отзывов to “Как выровнять блок-div по центру”

  1. Артём Курапов:

    1. Параметр align кажется уже устаревший
    2. Самый хороший вариант
    3. Раньше использовал, но потом заметил что из-за отрицательного отступа при значительном уменьшении ширины родительского элемента этот отрицательный отступ прячет элемент слева (если родительский элемент body) или выводит элемент за пределы родителя
    4. Как правило делаю ширину всётаки по пиксельно, ограничен достаточно.

  2. Zodios:

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

  3. bvn:

    Однако, второй способ у меня почему-то не работает в IE6… Ведь не работает же или я что-то не так делаю?

  4. Zodios:

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

  5. Сергей:

    Если не ошибаюсь, для этого надо использовать стиль
    margin-left:auto;
    margin-right:auto;

  6. Zodios:

    margin:0 auto; это тоже самое, только в сокращенной форме
    http://zodios.net/htmlcss/shortcss.html

  7. Xero201:

    У меня сначала тоже ничего не работало (блок прилип к левому краю как прокаженный :) . Даже хотел уже пожаловаться на это. Но потом заметил, что ширина блока к которому я применял margin равна… 100% (рудимент от попытки выравнивания с помощью text-align ;-) . Быстренько убрал эту несуразицу и все заработало. Так что большое спасибо.
    З.Ы.
    А можно узнать что это за волшебный параметр auto и почему он выравнивает именно по центру. Есть ли аналогичный способ прижать блок к правому краю?

  8. Ulan:

    Спасибо большое!! Второй вариант как раз то что и нужно… первый совсем устарел.

  9. Mira:

    Гы-гы! А теперь объясните как то-же самое сделать по вертикали, как в таблицах по умолчаню…

  10. olga:

    У меня в IE6 тоже не работает

  11. vasya:

    да, всем спасибо.
    работает второй способ :)

  12. Игорь:

    второй способ не работает в ie7

  13. nullweb:

    Решил проблему с IE6-7. Достаточно в CSS прописать стиль body { text-align: center; } Блок становится по центру и центрирование НЕ наследуется вложенным блокам.

  14. Alexander:

    попробуйте побалловаться с display:inline-block;
    при этом родительскому тегу задать text-align:center;

  15. nullweb:

    я так сделал:
    body { text-align: center; }
    #main { width: 1024px; text-align: left; margin: 0 auto; }

  16. Михаил:

    Спасибо большое автору , наконец-то мне удалось найти корректное выравнивание.

  17. Сергей:

    Класс, и ни одного способа, для резинового макета…

  18. Александр:

    #layer1 {
    height: 560px;
    width: 740px;
    margin-left:auto;
    margin-right:auto;}
    #layer2 {
    height: 300px;
    width: 590px
    margin-left:auto;
    margin-right:auto;}

    layer2 не выравнивается по центру своего родителя, а прижимается влево. Как быть? Как выравнять второй DIV по центру первого, если первый тоже необходимо выравнивать по центру?

  19. Александр:

    #layer1 {
    height: 560px;
    width: 740px;
    margin-left:auto;
    margin-right:auto;}
    #layer2 {
    height: 300px;
    width: 590px
    margin-left:auto;
    margin-right:auto;}

    <body&gt
    <div id="layer1"&gt
    <div id="layer2"&gt</div&gt
    </div&gt
    </body&gt

    layer2 не выравнивается по центру своего родителя, а прижимается влево. Как быть? Как выравнять второй DIV по центру первого, если первый тоже необходимо выравнивать по центру?

  20. Александр:

    #layer1 {
    height: 560px;
    width: 740px;
    margin-left:auto;
    margin-right:auto;}
    #layer2 {
    height: 300px;
    width: 590px
    margin-left:auto;
    margin-right:auto;}

    <body>
    <div id="layer1">
    <div id="layer2"&gt</div>
    </div>
    </body>

    layer2 не выравнивается по центру своего родителя, а прижимается влево. Как быть? Как выравнять второй DIV по центру первого, если первый тоже необходимо выравнивать по центру?

    p.s.: прошу простить автора за невольный флуд и удалить сообщения с некорректным html-кодом. Спасибо.

  21. Анонимно:

    вввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввввв

  22. Денис:

    спасибо за заметку

  23. Анонимно:

    dsfsf

  24. Papa Yoda:

    №15 nullweb
    Спасибо именно то что нужно!

  25. чС:

    чс ЧС

  26. СофтБесплатно:

    Подскажите как мне в joomle один банер в блоке о центровать, а не по левому краю выставить?

  27. Supreme 2:

    Да, с IE, конечно, много проблем. В том числе и с центрированием. Но, как сказали выше, достаточно в css прописать к «body» – text-align:center и всё сразу становится отлично :)

  28. yashka:

    Большое спасибо!!! Очень помогло…

  29. Пётр:

    Забавно, что, когда я эксперементировал с третьим способом в Dreamweaver CS4, блок вёл себя просто волшебно! Он «менял правила» в зависимости от наличия или отсутствия марджина.

    Попробуйте, очень увлекательно.

  30. RonnyBonny:

    Спасибо, второй способ реально помог.

  31. Netjet:

    text-align: left;
    margin: 0 auto;
    вот для меня самый действенный
    все остальное с косяками…не раз уже сталкивался с подобной задачей
    если маргин делать с «-» то присжатии кояки идут

  32. Alex_43:

    Спасибо 2ой способ помог!

  33. Роман:

    Проще всего :
    прописать в body
    margin: 0 auto; /* Отступ слева и справа */

  34. Костя:

    чтобы выровнять блок по горизонтали прописываем блоку свойство «display: block;» (иначе в ie6 не будет пахать)Ю задаем ширину (можно в процентах) и присваиваем «margin: 0 auto;».

  35. Yo!:

    Использую 2ой способ, спасибо.
    но, не работает с параметром position:absolute; и др, что делает проблематичным растянуть на 100% по вертикали и приклеить к верхнему краю без отступа. есть ли компромисс?

  36. Владимир:

    Спасибо

  37. W.Kalmanovski:

    Every year thousands of people become millionaires by just learning and trading on the Forex market but that is only a fraction i.e. 2% out of the billions of all those who spend thousands of dollars on the Forex Market and get nothing in return. This elite group of Forex traders always conceal their secrets, and they never want to help somebody else… until now! We present a really independent web resource, dedicated to Forex market, where you can find information about recent ineteresting facts, brokers and Forex Expert Advisors. Absolutely FREE! You even can discuss all of them on our firum. Read and write your own reviews on our forum! Automated Forex Trading – all of it you can find on forextradersreview.com

  38. Елена:

    Я, наверное, совсем блондинка… Мне ничего не помогает!!!… :’(

  39. Иван:

    Ложь, на IE второй способ не катит…
    или автор не знает значения слова «кроссбраузерный»

  40. серый волк:

    спасибо автору!
    вариант № 3 очень выручил!!!

  41. Ляус:

    Хватит парить мозги, вот вариант что работает одинаково и в IE.6+ и остальных местах.
    ПОДРОБНЕЕ:
    CSS: margin: 0px auto; – (для всех не IE браузеров) используется в том блоке, что нужно центрировать (в данном случае блок-»d2″).
    СSS: text-align:center; – (IE Fix) задаем этот параметр для родительского блока «d1″, в котором существует центрируемый нами блок «d2″.
    — ПРИМЕР —

    Какой то контент.

    —-
    Большая просьба автору сего сайта, замути наконец таки хоть некое подобие [BB]… а то, что то, не ICE и читать комменты и писать.

  42. Ляус:

    – ПРИМЕР (в комменте выше HTML был жестоко убит)–
    <div style=»text-align:center;»>
    <div style=»margin: 0px auto; width:300px; height:350px; background:#e1e1e4;»>
    Какой то контент.
    </div>
    </div>

    — Автору: Сделай подмену > на & gt;

  43. Алексей:

    Спасибо, так просто и очень помогло (2-й вариант). А то мудохался с таблицами и пробовал блок выровнять по центру внутри ячейки, никак не получалось.

  44. AGS Anitsumi:

    Вариант 2 не работает если position:absolute

  45. ushi:

    Спасибо автору! Спасибо Ляусу! Вива!!!

  46. ushi:

    зайдите на electrogold.tk
    В сайдбаре есть блок реклама. Там квадрат гугла.
    Он вписан вписан как показано ниже

    КВАДРАТ

    Но нету отступа на 10 снизу, как вы видите в сайдбаре сайта.
    Помогите решить проблему.

  47. Айдар:

    Способ второй не будет работать в quirks mode

  48. Михаил, создатель интернет магазинов:

    Интереснен вопрос: как выровнять div переменной ширины по центру другого div-а тоже переменной ширины?

  49. tiesto:

    Полезно – но нужно было написать полностью как выглядит синтаксис для вставки выравнивания

  50. WaP:

    Ни один метод не подошёл :(

  51. qqqq:

    nullweb:
    Июль 7, 2009 в 7:34
    Решил проблему с IE6-7. Достаточно в CSS прописать стиль body { text-align: center; } Блок становится по центру и центрирование НЕ наследуется вложенным блокам.

    классное решение!

  52. Tiesto:

    Потрясающие варианты!

  53. GreyPodjigateli:

    Спасибо

  54. Siregik:

    Спасибо nullweb!!!! ))) заработал в IE6,7 Единственно в последующем блоке нужно установить стиль text-align: left;

    цитирую:
    # nullweb:
    Июль 7, 2009 в 7:34

    Решил проблему с IE6-7. Достаточно в CSS прописать стиль body { text-align: center; } Блок становится по центру и центрирование НЕ наследуется вложенным блокам.

  55. Дима:

    Подскажите как выровнять этот скрипт по центру сайта! спасибо!

    hs.graphicsDir = ‘http://csfobia.ru/highslide/graphics/’;

    $TITLE$

    $MESSAGE$

    Подробнее…
    Просмотров: $READS$ |Рейтинг : $RATING$

  56. Vasya:

    ПОШЛИ ВСе НА ХУЙ

  57. Короткий:

    Чего-то у меня второй вариант не срабатывает (

  58. I.CaR®:

    второй вариант в Opera на сработал.
    Делал ТУТ DIV

  59. I.CaR®:

    -div style=»margin:0 auto; border:#999999 1px solid;»- ТУТ DIV -div-

  60. denis ko:

    а с absolute position (и ПЕРЕМЕННОЙ шириной) так и не придумал как зделать…((

  61. сергей:

    при absolute параметре div’ов не получается выравнить их совокупность по центру body…

  62. Максим:

    Спасибо ВАМ автор статьи!
    Я уж думал не выставлю на резиновом сайте!
    { padding: 0 50% 0 50%; margin-left:-100px;}

  63. veronique:

    preteen girl pics

  64. дима:

    eeeeeeeeee спасибо посоны!!
    3й вариант это тема, аксиома так сказать, самому допереть до этого сложно. да зачем каждый раз выводить аксиомы…!
    в закладки ваш сайт, а то 3 дня голову ломал над этой проблемой))!удачи

  65. olene:

    pictures of gwyneth paltrow naked

  66. Anton:

    Выравнивание gj центру при absolute
    div {
    position:absolute;
    left:1px;
    right:1px;
    width:1000px;
    }

  67. Anton:

    margin-left:auto; margin-right:auto;

    поспешил:)

  68. mans:

    Да, супер, способ №2 сразу все выровнял по центру :)

  69. leonie:

    warfarin diet recipes

  70. Pneuttynuarly:

    Новости нарко движений, разговоры о веществах и не только, наркоманы трут за жизнь в разделе о разномhttp://tor4.su/phpBB/viewforum.php?f=58

  71. lavona:

    I know. Well overan ranitidine 150 mg side effects hour, she complied somewhat.I ranitidine 150 dont. I guess it had her uncle.It made sense ranitidine tablets usp to rise. I cry. Im not it was in.Get serious. Determined ranitidine alcohol use to make nofurther progress it.Lee gulped. Stanton took the plan. She had been ranitidine tablets right.You know, tommy said in front of trouble, vivian ranitidine hcl syrup said.

  72. jokinecmyrma:

    Still smiling, but, the sleeping draught that susan pushed against her ass enalapril maleate side effects and droll.

Оставить отзыв


Последние записи

Real Time Web Analytics