При создании макета веб-страницы, вы, вероятно, сталкивались с ситуацией, когда вам нужно отцентрировать div по горизонтали и вертикали, используя CSS. Есть несколько способов с применением CSS и JQuery.
Для центрирования div только по горизонтали, необходимо указать ширину и автоматическое значение для левого и правого margins (это сокращенная форма написания CSS-свойств). Этот метод работает на блочных элементов (div, p, h1 и т. п.). Чтобы применить его для линейных элементов (например, гиперссылок и изображений), необходимо написать еще одно правило — display:block.
Выравнивание по горизонтали и вертикали средствами CSS
Одновременное центрирование div по по горизонтали и вертикали чуть более хитрое. Вам нужно заранее знать размеры div.
С помощью абсолютного позиционирования элементов, мы можем выдернуть его из потока и задать его позицию по отношению к окну браузера. Задав смещение div на 50% от левой и верхней части окна, мы центрируем левый верхний угол относительно страницы. Единственное, что нам осталось сделать, это сместить div влево и вверх на половину его ширины и высоты, задав отрицательные значения margin, чтобы он идеально располагался по центру.
Выравнивание по горизонтали и вертикали с помощью jQuery
Как уже говорилось, вышеуказанный метод CSS работает только с div-ом фиксированного размера. На помощь приходит JQuery:
Функция вычисляет ширину окна в $(window).resize() всякий раз при каждом изменении размера окна пользователем. Мы используем outerWidth() и outerHeight(), потому что в отличие от обычной width() и height(), они добавляют padding и ширину border , возвращая размер. Наконец, мы адаптируем при изменении размеров окна и центрируем div при перезагрузке страницы.
Преимуществом использования этого метода является то, что вам заранее не нужно знать размер div-а. Основным недостатком является то, что этот метод будет работать только с включенным JavaScript.
Не забудьте поделиться вашими любимыми методами в комментариях.
СодержаниеСовет 1. Тип сайтаСовет 2. Выбор CMSСовет 3. Тематика сайтаСовет 4. Структура сайтаСовет 5. Шрифты и
Комментарии: 12
Игорь
Благодарю за статью, очень удобно
Игорь
А по какому принципу работает auto? Если у нас выравнивается куча дивов? То как он сработает? Внутренние отступы какими будут?
FORTRESS-DESIGN (автор)
Свойство auto размещает объект по центру контейнера, в котором он находится.
Александр
Зачем нужно $(window).resize(); после первого запуска ? Не понятно
FORTRESS-DESIGN (автор)
Какого первого запуска? Приведен пример объявления функции и вызова её. И ни строчки больше. Вы о чем?
Александр
$(window).resize(function(){ $('.class-name').css({ position:'absolute', left: ($(window).width() - $('.class-name').outerWidth())/2, top: ($(window).height() - $('.class-name').outerHeight())/2 }); этого достаточно, у меня работает, зачем нужно ещё и это: $(window).resize();
FORTRESS-DESIGN (автор)
Строка $(window).resize(); — это вызов функции. То есть написав всего одну строку, можно несколько раз вызывать одну и ту же функцию в нескольких местах кода, где это необходимо.
Штиф Васлер
А как не при ресайзе, а изначально сделать блок по центру?? зачем при ресайзе то конкретно, надо что бы сразу стоял по центру, как это сделать??
Максим
Метод через jquery описанный в данной статье работает только когда изменяется размер экрана. При стартовой загрузке страницы метод не рабочий, увы. поэтому размеры нужно указывать в любом случае
fortress-design
А разве при загрузке страницы он не определяет размер она?
Максим
Метод .resize работает когда идет срабатывание события изменение окна браузера, от того он и не рабочий когда идет просто стартовая загрузка страниц. Сами попробуйте заюзать, если до того как написать статью вы этого не делали
Благодарю за статью, очень удобно
А по какому принципу работает auto? Если у нас выравнивается куча дивов? То как он сработает? Внутренние отступы какими будут?
Свойство
auto
размещает объект по центру контейнера, в котором он находится.Зачем нужно $(window).resize(); после первого запуска ? Не понятно
Какого первого запуска? Приведен пример объявления функции и вызова её. И ни строчки больше. Вы о чем?
$(window).resize(function(){
$('.class-name').css({
position:'absolute',
left: ($(window).width() - $('.class-name').outerWidth())/2,
top: ($(window).height() - $('.class-name').outerHeight())/2
});
этого достаточно, у меня работает, зачем нужно ещё и это:
$(window).resize();
Строка
$(window).resize();
— это вызов функции. То есть написав всего одну строку, можно несколько раз вызывать одну и ту же функцию в нескольких местах кода, где это необходимо.А как не при ресайзе, а изначально сделать блок по центру?? зачем при ресайзе то конкретно, надо что бы сразу стоял по центру, как это сделать??
Метод через jquery описанный в данной статье работает только когда изменяется размер экрана. При стартовой загрузке страницы метод не рабочий, увы. поэтому размеры нужно указывать в любом случае
А разве при загрузке страницы он не определяет размер она?
Метод .resize работает когда идет срабатывание события изменение окна браузера, от того он и не рабочий когда идет просто стартовая загрузка страниц. Сами попробуйте заюзать, если до того как написать статью вы этого не делали
А каким методом вы определяете размер окна?