Как центрировать эту галерею изображений в лайтбоксе? [Дубликат]

Также имейте в виду, что удаление указателя базового класса, когда нет виртуального деструктора, приведет к неопределенному поведению . Что-то, что я узнал совсем недавно:

Как следует переопределять удаление в C ++?

Я использую C ++ в течение многих лет, и мне все еще удается повесить я.

3645
задан 27 revs, 20 users 14% 6 July 2018 в 20:42
поделиться

30 ответов

Вы можете применить этот CSS к внутреннему <div>:

#inner {
  width: 50%;
  margin: 0 auto;
}

Конечно, вам не нужно устанавливать width на 50%. Любая ширина, меньшая, чем содержащая <div>, будет работать. margin: 0 auto - это то, что делает фактическое центрирование.

Если вы ориентируетесь на IE8 +, возможно, лучше иметь это вместо:

#inner {
  display: table;
  margin: 0 auto;
}

Это сделает центр внутренних элементов горизонтально и работает без установки конкретного width.

Рабочий пример здесь:

#inner {
  display: table;
  margin: 0 auto;
}
<div id="outer" style="width:100%">
  <div id="inner">Foo foo</div>
</div>

4103
ответ дан 11 revs, 7 users 31% 15 August 2018 в 15:44
поделиться
  • 1
    Для вертикального центрирования я обычно использую «высоту линии». (высота строки = высота). Это просто и приятно, но он работает только с текстом текста одной строки :) – Nicolas Guillaume 23 June 2010 в 13:36
  • 2
    Вы должны использовать тег! DOCTYPE на своей странице html, чтобы он хорошо работал на IE. – Fabio 28 January 2012 в 16:23
  • 3
    Следует отметить, что может быть необходимо добавить «float: none»; для #inner. – Mert Mertce 27 September 2013 в 09:30
  • 4
    Вы также устанавливаете верхнее и нижнее поля на 0, что не связано. Лучше положить margin-left: auto; margin-right: auto, я думаю. – Emmanuel Touzery 9 February 2014 в 00:45
  • 5
    Не обязательно margin:0 auto: он может быть margin: <whatever_vertical_margin_you_need> auto вторым, являющимся горизонтальным краем. – YakovL 3 May 2016 в 19:07

Лучшие подходы к CSS 3 .

Модель коробки:

#outer{
    width: 100%;

    /* Firefox */
    display: -moz-box;
    -moz-box-pack: center;
    -moz-box-align: center;

    /* Safari and Chrome */
    display: -webkit-box;
    -webkit-box-pack: center;
    -webkit-box-align: center;

    /* W3C */
    display: box;
    box-pack: center;
    box-align: center;
}
#inner{
    width: 50%;
}

В соответствии с вашей практичностью вы также можете использовать box-orient, box-flex, box-direction свойства.

Flex:

#outer {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
}

Подробнее о центрировании дочерних элементов

И это объясняет, почему модель коробки является лучшей подход:

300
ответ дан 12 revs, 7 users 58% 15 August 2018 в 15:44
поделиться
  • 1
    он также работает для меня, когда внутренний div имеет float: left; – Tareq 12 November 2012 в 08:30
  • 2
    Прежде чем приступать к реализации этого решения, сначала прочитайте этот ответ . – cimmanon 24 April 2013 в 19:51
  • 3
    Safari на данный момент по-прежнему требует флагов -webkit для flexbox (display: -webkit-flex; и -webkit-align-items: center; и -webkit-justify-content: center;) – Joseph Hansen 23 July 2015 в 15:59

Недавно мне пришлось центрировать «скрытый» div (т. е. display: none;), в котором была встроена форма, которая должна была быть сосредоточена на странице. Я написал следующий jQuery для отображения скрытого div & amp; затем обновите CSS до автоматической сгенерированной ширины таблицы и измените маржу, чтобы центрировать ее. (Переключатель отображения запускается щелчком по ссылке, но этот код не обязательно отображался.)

ПРИМЕЧАНИЕ. Я использую этот код, потому что Google привел меня к этому решению переполнения стека и amp; все будет работать, за исключением того, что скрытые элементы не имеют ширины и amp; не могут быть изменены / центрированы до тех пор, пока они не будут показаны.

$(function(){
  $('#inner').show().width($('#innerTable').width()).css('margin','0 auto');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inner" style="display:none;">
  <form action="">
    <table id="innerTable">
      <tr><td>Name:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="submit"></td></tr>
    </table>
  </form>
</div>

51
ответ дан 2 revs, 2 users 65% 15 August 2018 в 15:44
поделиться

Вот что вы хотите в кратчайшие сроки.

JSFIDDLE

#outer {
    margin - top: 100 px;
    height: 500 px; /* you can set whatever you want */
    border: 1 px solid# ccc;
}

#inner {
    border: 1 px solid# f00;
    position: relative;
    top: 50 % ;
    transform: translateY(-50 % );
}
23
ответ дан 2 revs, 2 users 71% 15 August 2018 в 15:44
поделиться

Flex имеет более 97% поддержки браузеров и может быть лучшим способом решения таких проблем в нескольких строках:

#outer {
  display: flex;
  justify-content: center;
}
16
ответ дан 2 revs, 2 users 83% 15 August 2018 в 15:44
поделиться

Другим решением для этого без необходимости устанавливать ширину для одного из элементов является атрибут CSS 3 transform.

#outer {
  position: relative;
}

#inner {
  position: absolute;
  left: 50%;

  transform: translateX(-50%);
}

Фокус в том, что translateX(-50%) устанавливает #inner элемент на 50 процентов слева от его собственной ширины. Вы можете использовать тот же трюк для вертикального выравнивания.

Вот Fiddle , показывающий горизонтальное и вертикальное выравнивание.

Дополнительная информация находится в Mozilla Developer Network .

37
ответ дан 2 revs, 2 users 89% 15 August 2018 в 15:44
поделиться
  • 1
    Также могут потребоваться префиксы поставщиков: -webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0); – Skippy le Grand Gourou 2 September 2015 в 13:48

Ну, мне удалось найти решение, которое, возможно, будет соответствовать всем ситуациям, но использует JavaScript:

Вот структура:

<div class="container">
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
</div>

И вот фрагмент JavaScript:

$(document).ready(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});

Если вы хотите использовать его в ответном подходе, вы можете добавить следующее:

$(window).resize(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});
20
ответ дан 2 revs, 2 users 91% 15 August 2018 в 15:44
поделиться

Один из вариантов, который я нашел:

Все говорят использовать:

margin: auto 0;

Но есть еще один вариант. Установите это свойство для родительского div. Он отлично работает в любое время:

text-align: center;

И посмотрите, центр для детей.

И, наконец, CSS для вас:

#outer{
     text-align: center;
     display: block; /* Or inline-block - base on your need */
}

#inner
{
     position: relative;
     margin: 0 auto; /* It is good to be */
}
17
ответ дан 3 revs, 2 users 73% 15 August 2018 в 15:44
поделиться
  • 1
    text-align работать для выравнивания текста в контейнере, а не для контейнера его родительскому элементу. – Lalit Kumar 4 December 2013 в 09:32
  • 2
    я тестирую его, проблема с установкой дочернего элемента в центр, должна, когда у вас больше одного ребенка, больше раз margin: 0 автоматический ответ шрифта, но центр выравнивания текста для родителя делает этот ребенок центром, даже если он является элементом и не быть текстом, проверить и посмотреть, что произойдет – Pnsadeghy 4 December 2013 в 10:35
  • 3
    – Lalit Kumar 4 December 2013 в 11:23
  • 4
    Посмотрите этот пример jsfiddle.net/uCdPK/2 и скажите мне, что вы думаете об этом !!!!! – Lalit Kumar 4 December 2013 в 12:03

Если ширина содержимого неизвестна, вы можете использовать следующий метод. Предположим, что у нас есть эти два элемента:

  • .outer - полная ширина
  • .inner - не установлена ​​ширина (но может быть указана максимальная ширина)

Предположим, что вычисленная ширина элементов равна 1000px и 300px соответственно. Выполните следующие действия:

  1. Оберните .inner внутри .center-helper
  2. Сделайте .center-helper встроенным блоком; он становится того же размера, что и .inner, делая его шириной 300 пикселей.
  3. Нажмите .center-helper на 50% относительно родителя; это помещает его влево на 500px wrt. внешний.
  4. Push .inner 50% слева относительно его родителя; это помещает его левое на -150px wrt. который означает, что его левый угол равен 500 - 150 = 350px.
  5. body {
      font: medium sans-serif;
    }
    
    .outer {
      overflow: hidden;
      background-color: papayawhip;
    }
    
    .center-helper {
      display: inline-block;
      position: relative;
      left: 50%;
      background-color: burlywood;
    }
    
    .inner {
      display: inline-block;
      position: relative;
      left: -50%;
      background-color: wheat;
    }
    <div class="outer">
      <div class="center-helper">
        <div class="inner">
          <h1>A div with no defined width</h1>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
              Duis condimentum sem non turpis consectetur blandit.<br>
              Donec dictum risus id orci ornare tempor.<br>
              Proin pharetra augue a lorem elementum molestie.<br>
              Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p>
        </div>
      </div>
    </div>
    ]

    .outer {
        overflow: hidden;
    }
    .center-helper {
        float: left;
        position: relative;
        left: 50%;
    }
    .inner {
        float: left;
        position: relative;
        left: -50%;
    }
    
    16
    ответ дан 3 revs, 2 users 92% 15 August 2018 в 15:44
    поделиться

Как я обычно делаю это, используется абсолютная позиция:

#inner{
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
    position: absolute;
}

Внешнему div не нужно никаких дополнительных свойств для этого.

45
ответ дан 3 revs, 2 users 95% 15 August 2018 в 15:44
поделиться
  • 1
    Это может не сработать, если у вас есть другие divs ниже централизованного div. – NoChance 26 July 2018 в 07:59

Крис Койер, который написал отличный пост в разделе «Центрирование в неизвестном» в своем блоге. Это обзор нескольких решений. Я отправил сообщение, которое не опубликовано в этом вопросе. У него больше поддержка браузера, чем решение flexbox, и вы не используете display: table;, что может нарушить другие вещи.

/* This parent can be any width and height */
.outer {
  text-align: center;
}

/* The ghost, nudged to maintain perfect centering */
.outer:before {
  content: '.';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  width:0;
  overflow:hidden;
}

/* The element to be centered, can
   also be of any width and height */ 
.inner {
  display: inline-block;
  vertical-align: middle;
  width: 300px;
}
37
ответ дан 3 revs, 3 users 93% 15 August 2018 в 15:44
поделиться

Самый простой способ:

#outer {
  width: 100%;
  text-align: center;
}
#inner {
  margin: auto;
  width: 200px;
}
<div id="outer">
  <div id="inner">Blabla</div>
</div>

25
ответ дан 4 revs, 3 users 57% 15 August 2018 в 15:44
поделиться
  • 1
    В качестве примечаний для скрипки, #inner должен иметь установленную ширину. – Michael Terry 5 February 2015 в 22:06

Например, см. эту ссылку и фрагмент ниже:

div#outer {
  height: 120px;
  background-color: red;
}

div#inner {
  width: 50%;
  height: 100%;
  background-color: green;
  margin: 0 auto;
  text-align: center; /* For text alignment to center horizontally. */
  line-height: 120px; /* For text alignment to center vertically. */
}
<div id="outer" style="width:100%;">
  <div id="inner">Foo foo</div>
</div>

Если вы у вас много детей под родителем, поэтому ваш CSS-контент должен быть таким, как этот пример на скрипке .

HTML-контент выглядит так:

<div id="outer" style="width:100%;">
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> Foo Text </div>
</div>

Затем см. пример на скрипке .

27
ответ дан 4 revs, 3 users 63% 15 August 2018 в 15:44
поделиться

Установите width и установите margin-left и margin-right на auto. Это только для горизонтальной. Если вы хотите в обоих направлениях, вы просто сделаете это в обоих направлениях. Не бойтесь экспериментировать; это не похоже на то, что вы что-нибудь сломаете.

70
ответ дан 4 revs, 4 users 33% 15 August 2018 в 15:44
поделиться

Это мой ответ.

#outerDiv {
  width: 500px;
}

#innerDiv {
  width: 200px;
  margin: 0 auto;
}
<div id="outerDiv">
  <div id="innerDiv">Inner Content</div>
</div>

40
ответ дан 4 revs, 4 users 39% 15 August 2018 в 15:44
поделиться

Я создал этот пример , чтобы показать, как вертикально и горизонтально align.

Код в основном таков:

#outer {
  position: relative;
}

и ...

#inner {
  margin: auto;  
  position: absolute;
  left:0;
  right: 0;
  top: 0;
  bottom: 0;
} 

, и он останется в center, даже если вы измените размер экрана.

200
ответ дан 4 revs, 4 users 60% 15 August 2018 в 15:44
поделиться
  • 1
    +1 для этого метода, я собирался ответить на него. Обратите внимание, что вы должны объявить ширину элемента, который хотите центрировать по горизонтали (или высоты, если по центру вертикально). Вот подробное объяснение: codepen.io/shshaw/full/gEiDt . Один из наиболее универсальных и широко поддерживаемых методов центрирования элементов по вертикали и / или по горизонтали. – stvnrynlds 16 December 2013 в 20:27
  • 2
    Вы не можете использовать прописку в div, но если вы хотите придать иллюзию, используйте границу того же цвета. – Squirrl 9 July 2014 в 12:45
  • 3
    Я думаю, что для того, чтобы этот метод работал, вам нужно установить с и высоту внутреннего div – Nicolas S.Xu 29 November 2015 в 22:39

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

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

Контейнер:

  • должен иметь text-align: center;

Поле содержимого:

  • должно иметь display: inline-block;

Демонстрация:

.container {
  width: 100%;
  height: 120px;
  background: #CCC;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="container">
  <div class="centered-content">
    Center this!
  </div>
</div>

См. также этот Fiddle !


Центрирование и горизонтально & amp; по вертикали

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

Внешний контейнер:

  • должен иметь display: table;

Внутренний контейнер:

  • должен иметь display: table-cell;
  • должен иметь vertical-align: middle;
  • должен иметь text-align: center;

Поле содержимого:

  • должно иметь display: inline-block;

Демо:

.outer-container {
  display: table;
  width: 100%;
  height: 120px;
  background: #CCC;
}

.inner-container {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="centered-content">
      Center this!
    </div>
  </div>
</div>

См. также этот скрипт !

25
ответ дан 4 revs, 4 users 75% 15 August 2018 в 15:44
поделиться
  • 1
    Я думаю, что использование flexbox - лучший подход. И еще проще. См. Некоторые интересные JS-скрипты в этой статье для этого же. – Niket Pathak 2 February 2018 в 16:35

Если вы не хотите устанавливать фиксированную ширину во внутреннем div, вы можете сделать что-то вроде этого:

#outer {
  width: 100%;
  text-align: center;
}

#inner {
  display: inline-block;
}
<div id="outer">  
    <div id="inner">Foo foo</div>
</div>

Это делает внутренний div встроенным элементом, который может быть центрирован с помощью text-align.

1115
ответ дан 5 revs, 4 users 62% 15 August 2018 в 15:44
поделиться
  • 1
    @SabaAhang правильный синтаксис для этого будет float: none; и, вероятно, нужен только потому, что #inner унаследовал float из left или right из другого места в вашем CSS. – Doug McLean 12 November 2015 в 10:21
  • 2

Центрирование div неизвестной высоты и ширины

Горизонтально и вертикально.

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>

Тинкер с ним далее на Codepen или на JSBin .

74
ответ дан 6 revs, 4 users 81% 15 August 2018 в 15:44
поделиться

Для Firefox и Chrome:

<div style="width:100%;">
  <div style="width: 50%; margin: 0px auto;">Text</div>
</div>

Для Internet & nbsp; Explorer, Firefox и Chrome:

<div style="width:100%; text-align:center;">
  <div style="width: 50%; margin: 0px auto; text-align:left;">Text</div>
</div>

Свойство text-align: необязательно для современных браузеров, но оно необходимо в режиме Internet & nbsp; Quirks Mode для поддержки устаревших браузеров.

43
ответ дан 7 revs, 7 users 47% 15 August 2018 в 15:44
поделиться
  • 1
    Не требуется свойство text-align. Это совершенно необязательно. – Touhid Rahman 23 May 2013 в 06:29
  • 2
    text-align действительно необходим для работы в режиме IE quicks, поэтому, если вы не возражаете добавить небольшое выражение для поддержки старых браузеров, сохраните его там. (IE8 с правилами IE8 и правилами IE7 работают без выравнивания текста, так что может быть, это касается только IE6 и старше) – heytools 4 November 2017 в 03:02

Предположим, что ваш div имеет ширину 200px:

.centered {
  position: absolute;
  left: 50%;
  margin-left: -100px;
}

Убедитесь, что родительский элемент расположен , то есть относительный, фиксированный, абсолютный или липкий.

Если вы не знаете ширины своего div, вы можете использовать transform:translateX(-50%); вместо отрицательного поля.

https://jsfiddle.net/gjvfxxdj/

216
ответ дан 7 revs, 7 users 48% 15 August 2018 в 15:44
поделиться
  • 1
    Это не работает в Safari – cesards 8 August 2015 в 09:05
  • 2
    Мне не нравится это решение, потому что, когда внутренний элемент слишком широк для экрана, вы не можете прокручивать весь элемент по горизонтали. margin: 0 auto работает лучше. – Aloso 30 December 2015 в 05:02
  • 3
    почему у положить маржу слева: -100, это не сработает – Robert Limanto 30 November 2016 в 00:51
  • 4
    Я читал, что это единственный метод, который будет работать в IE6 / 7 – Andy 31 October 2017 в 08:25
  • 5
    margin-left: auto; margin-right: auto; центрирует элемент уровня блока – unicodexm 10 November 2017 в 20:15

Некоторые плакаты упоминали о CSS & nbsp; 3 пути к центру с помощью display:box.

Этот синтаксис устарел и больше не должен использоваться. [См. Также этот пост] .

Так что для полноты здесь самый последний способ сосредоточиться в CSS & nbsp; 3 с помощью Flexible Box Layout Module .

Итак, если у вас есть простая разметка вроде:

<div class="box">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
</div>

... и вы хотите центрировать свои элементы в поле, вот что вам нужно в родительском элементе (.box ):

.box {
    display: flex;
    flex-wrap: wrap; /* Optional. only if you want the items to wrap */
    justify-content: center; /* For horizontal alignment */
    align-items: center; /* For vertical alignment */
}

.box {
  display: flex;
  flex-wrap: wrap;
  /* Optional. only if you want the items to wrap */
  justify-content: center;
  /* For horizontal alignment */
  align-items: center;
  /* For vertical alignment */
}
* {
  margin: 0;
  padding: 0;
}
html,
body {
  height: 100%;
}
.box {
  height: 200px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  border: 2px solid tomato;
}
.box div {
  margin: 0 10px;
  width: 100px;
}
.item1 {
  height: 50px;
  background: pink;
}
.item2 {
  background: brown;
  height: 100px;
}
.item3 {
  height: 150px;
  background: orange;
}
<div class="box">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
</div>

Если вам нужно поддерживать старые браузеры, которые используют более старый синтаксис для flexbox , здесь хорошее место для просмотра.

158
ответ дан 8 revs, 4 users 86% 15 August 2018 в 15:44
поделиться
  • 1
    – ShibinRagh 26 April 2013 в 12:57
  • 2
    что вы подразумеваете под «синтаксисом устаревает», является ли оно устаревшим? – Konga Raju 6 September 2013 в 11:18
  • 3
    Спецификация Flexbox прошла 3 основные изменения. Самый последний проект - с сентября 2012 года, который официально осуждает все предыдущие проекты. Однако поддержка браузера является пятнистой (особенно старыми браузерами для Android): stackoverflow.com/questions/15662578/… – cimmanon 1 October 2013 в 21:33
  • 4
    Это работало для меня в Chrome, когда версия Justin Poliey этого не сделала. – Vern Jensen 29 June 2016 в 02:50
  • 5
    @WouterVanherck зависит от значения flex-direction. Если это «строка» (по умолчанию), то justify-content: center; для горизонтального выравнивания (как я уже упоминал в ответе) Если это «столбец», то justify-content: center; используется для вертикального выравнивания. – Danield 22 March 2017 в 13:29

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

#outer {
    position: absolute;
    left: 50%;
}

#inner {
    position: relative;
    left: -50%;
}

EDIT: оба элемента должны быть одинаковой ширины для правильной работы.

30
ответ дан BenjaminRH 15 August 2018 в 15:44
поделиться
  • 1
    Просто установите это правило только для параметра #inner: #inner { position:relative; left:50%; transform:translateX(-50%); }. Это работает для любой ширины. – Jose Rui Santos 24 November 2015 в 11:30

Этот метод также отлично работает:

div.container {
   display: flex;
   justify-content: center; /* for horizontal alignment */
   align-items: center;     /* for vertical alignment   */
}

Для внутреннего <div> единственным условием является то, что его height и width не должны быть больше, чем у его контейнера .

19
ответ дан Billal BEGUERADJ 15 August 2018 в 15:44
поделиться

Он не может быть центрирован, если вы не придаете ему ширины, иначе он будет по умолчанию использовать все горизонтальное пространство.

74
ответ дан gizmo 15 August 2018 в 15:44
поделиться
  • 1
    и если вы не знаете ширины? Скажите, потому что контент динамический? – gman 2 June 2011 в 16:45
  • 2
    Максимальная ширина? что об этом? – Will Hoskings 17 March 2018 в 23:32

Вы можете сделать что-то вроде этого

#container {
   display: table;
   width: <width of your container>;
   height: <height of your container>;
}

#inner {
   width: <width of your center div>;
   display: table-cell;
   margin: 0 auto;
   text-align: center;
   vertical-align: middle;
}

Это также приведет к выравниванию #inner по вертикали. Если вы не хотите, удалите свойства display и vertical-align;

21
ответ дан Kenneth Palaganas 15 August 2018 в 15:44
поделиться

Свойство box-align CSS3

#outer {
    width:100%;
    height:100%;
    display:box;
    box-orient:horizontal;
    box-pack:center;
    box-align:center;
}
75
ответ дан neoneye 15 August 2018 в 15:44
поделиться

Text-align: center

Применяя text-align: center , встроенное содержимое центрируется в строке строки. Однако, поскольку внутренний div по умолчанию width: 100%, вы должны установить определенную ширину или использовать одно из следующих значений:

#inner {
  display: inline-block;
}

#outer {
  text-align: center;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>


Маржа: 0 auto

Использование margin: 0 auto - еще одна опция, и она более подходит для совместимости старых браузеров. Он работает вместе с display: table .

#inner {
  display: table;
  margin: 0 auto;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>


Flexbox

display: flex ведет себя как элемент блока и выдает его содержимое в соответствии с моделью flexbox. Он работает с justify-content: center .

Обратите внимание: Flexbox совместим с большинством браузеров, но не со всеми. См. здесь для полного и обновленного списка совместимости браузеров.

#inner {
  display: inline-block;
}

#outer {
  display: flex;
  justify-content: center;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>


Transform

transform: translate позволяет вам изменять координатное пространство модели визуального форматирования CSS. Используя его, элементы могут быть переведены, повернуты, масштабированы и перекошены. Для центрирования по горизонтали требуется position: absolute и left: 50% .

#inner {
  position: absolute;
  left: 50%;
  transform: translate(-50%, 0%);
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>


<center> (Устаревший)

Тег <center> является альтернативой HTML text-align: center . Он работает с более старыми браузерами и большинством новых, но это не считается хорошей практикой, поскольку эта функция устарела и удалена из веб-стандартов.

#inner {
  display: inline-block;
}
<div id="outer">
  <center>
    <div id="inner">Foo foo</div>
  </center>
</div>

19
ответ дан Paolo Forgia 15 August 2018 в 15:44
поделиться

Если вы не хотите устанавливать фиксированную ширину и не хотите дополнительного поля, добавьте display: inline-block к вашему элементу.

Вы можете использовать:

#element {
    display: table;
    margin: 0 auto;
}
120
ответ дан Salman Abbas 15 August 2018 в 15:44
поделиться

Попробуйте сыграть с

margin: 0 auto;

Если вы хотите также центрировать свой текст, попробуйте использовать:

text-align: center;
17
ответ дан user1817972 15 August 2018 в 15:44
поделиться
  • 1
    text-align работать для выравнивания текста в контейнере, а не для контейнера его родительскому элементу. – Lalit Kumar 4 December 2013 в 09:33
Другие вопросы по тегам:

Похожие вопросы: