CSS: центральный блок, но выравнивание содержимого по левому краю

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

Примеры служат лучше всего

На этой странице :

http://yaml-online-parser.appspot.com/?yaml=%23+ASCII+Art%0d%0a---+%7c%0d%0a++%5c%2f%2f%7c%7c%5c%2f%7c%7c%0d%0a++%2f%2f+%7c%7c++%7c%7c__%0d%0a&type=python

изображение ascii должно быть по центру (как кажется), но оно должно выровняться и выглядеть как "YAML".

Или это :

http://yaml-online-parser.appspot.com/?yaml=%3f+-+Detroit+Tigers%0d%0a++-+Chicago+cubs%0d%0a%3a%0d%0a++-+2001-07-23%0d%0a%0d%0a%3f+%5b+New+York+Yankees%2c%0d%0a++++Atlanta+Braves+%5d%0d%0a%3a+%5b+2001-07-02%2c+2001-08-12%2c%0d%0a++++2001-08-14+%5d%0d%0a

все сообщение об ошибке должно выровняться, как в консоли.


person Paul Tarjan    schedule 13.08.2009    source источник


Ответы (9)


Сначала создайте родительский div, который центрирует его дочерний контент с text-align: center. Затем создайте дочерний элемент div, который использует display: inline-block для адаптации к ширине своих дочерних элементов и text-align: left для выравнивания содержимого, которое он содержит, по левому краю по желанию.

<div style="text-align: center;">
    <div style="display: inline-block; text-align: left;">
        Centered<br />
        Content<br />
        That<br />
        Is<br />
        Left<br />
        Aligned
    </div>
</div>

person Keavon    schedule 26.07.2015
comment
Понятно и эффективно. Спасибо! - person fuzzybear3965; 01.11.2016
comment
не работает, поскольку, как только одиночная строка текста не помещается в одну строку, он обертывает текст и приводит к тому, что блок имеет полную ширину, но текст меньше полной ширины, поэтому даже хотя блок центрирован, это не имеет значения, поскольку текст НЕ является полной шириной содержащего блока. Для примера обратитесь к диаграмме 2a stackoverflow.com/questions/8702802/ - person user3338098; 01.03.2017
comment
Просто и красиво! Спасибо - person Cesar Bielich; 07.10.2018
comment
@ user3338098 Это действительно работает, в вашем случае вам нужно установить максимальную ширину для вашего текста, чтобы блок не расширялся до нежелательного размера. Я буквально просто применил ту же самую логику к своей работе и смог получить диаграмму 1b + 2b. - person Mark; 17.06.2019

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

Предполагая, что элемент, который перемещается и будет центрирован, является div с id = "content" ...

<body>
<div id="wrap">
   <div id="content">
   This will be centered
   </div>
</div>
</body>

И примените следующий CSS

#wrap {
    float: left;
    position: relative;
    left: 50%;
}

#content {
    float: left;
    position: relative;
    left: -50%;
}

Вот хорошая ссылка на этот http://dev.opera.com/articles/view/35-floats-and-clearing/#centeringfloats.

person Paul Tarjan    schedule 13.08.2009
comment
Также отлично работает с оберткой pre и содержимым code. - person Serge Stroobandt; 11.10.2015
comment
не работает, поскольку, как только This will be centered не помещается в одну строку, он обертывает текст и приводит к тому, что блок имеет полную ширину, но текст меньше полной ширины, поэтому даже если блок центрирован, это не имеет значения, поскольку текст НЕ является полной шириной содержащего блока. Для примера обратитесь к диаграмме 2a stackoverflow.com/questions/8702802/. - person user3338098; 05.05.2016
comment
Старайтесь избегать использования отрицательных значений! Он не будет работать правильно во всех браузерах. - person Grasper; 25.04.2018

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

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

и чтобы выровнять его содержимое по левому краю:

text-align: left;
person eKek0    schedule 13.08.2009
comment
Итак, что мне поставить на мои ‹pre› и ‹code›? Я пробовал вариации на этот счет и потерпел неудачу. - person Paul Tarjan; 13.08.2009
comment
вы пробовали использовать класс css? - person eKek0; 13.08.2009
comment
также вы можете использовать контейнерный div для ›pre› - person eKek0; 13.08.2009
comment
Я пытаюсь использовать контейнер div, и единственный способ заставить его работать - с фиксированной шириной (чего я не хочу). - person Paul Tarjan; 13.08.2009

Я нашел самый простой способ центрировать и выровнять текст внутри контейнера по левому краю:

HTML:

<div>
  <p>Some interesting text.</p>
</div>

CSS:

P {
  width: 50%; //or whatever looks best
  margin: auto; //top and bottom margin can be added for aesthetic effect
}

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

person L.Gaunt    schedule 06.02.2018

Обычно вы должны использовать margin: 0 auto для div, как упоминалось в других ответах, но вам нужно будет указать ширину для div. Если вы не хотите указывать ширину, вы также можете (это зависит от того, что вы пытаетесь сделать) использовать поля, например, margin: 0 200px; , это должно сделать ваш контент центрированным, вы также можете увидеть ответ Лейу на мой вопрос

person Waleed Eissa    schedule 13.08.2009
comment
к сожалению, ваше решение создает переполнение с принудительной горизонтальной полосой прокрутки. Добавление overflow: hidden к родительскому элементу нехорошо, поскольку мой вывод может быть достаточно длинным, чтобы обеспечить полосу прокрутки. Извини :( - person Paul Tarjan; 13.08.2009
comment
На самом деле это не мое решение, о котором я говорил, но в любом случае я не понимаю, что вы имеете в виду под переполнением: скрытые принудительные полосы прокрутки, он должен скрывать содержимое, а не заставлять полосы прокрутки. - person Waleed Eissa; 13.08.2009
comment
Решение в вашем сообщении вызывает горизонтальную полосу прокрутки, поскольку содержимое фактически смещено на 50% вправо. Для этого требуется переполнение: скрыто для удаления, которое у меня не работает. - person Paul Tarjan; 17.08.2009

Это то, что вы ищите? Flexbox ...

.container{
  display: flex;
  flex-flow: row wrap;
  justify-content: center;
  align-content: center;
  align-items: center;
}
.inside{
  height:100px;
  width:100px;
  background:gray;
  border:1px solid;
}
<section class="container">
  <section class="inside">
    A
  </section>
  <section class="inside">
    B
  </section>
  <section class="inside">
    C
  </section>
</section>

person Ronnie Royston    schedule 03.12.2017

Для тех из нас, кто все еще работает со старыми браузерами, вот некоторые расширенные возможности обратной совместимости:

<div style="text-align: center;">
    <div style="display:-moz-inline-stack; display:inline-block; zoom:1; *display:inline; text-align: left;">
        Line 1: Testing<br>
        Line 2: More testing<br>
        Line 3: Even more testing<br>
    </div>
</div>

Частично вдохновлено этим сообщением: https://stackoverflow.com/a/12567422/14999964.

person Angilas    schedule 18.01.2021

Это работает

<div style="display:inline-block;margin:10px auto;">
    <ul style="list-style-type:none;">
        <li style="text-align:left;"><span class="red">❶</span> YouTube AutoComplete Keyword Scraper software <em>root keyword text box</em>.</li>
        <li style="text-align:left;"><span class="red">❷</span> YouTube.com website <em>video search text box</em>.</li>
        <li style="text-align:left;"><span class="red">❸</span> YouTube AutoComplete Keyword Scraper software <em>scraped keywords listbox</em>.</li>
        <li style="text-align:left;"><span class="red">❹</span> YouTube AutoComplete Keyword Scraper software <em>right click context menu</em>.</li>
    </ul>
</div>
person user7212232    schedule 19.03.2017
comment
Вы можете объяснить свой код, его преимущества и недостатки? Таким образом, другие могут учиться на нем, а не просто копировать и вставлять то, что они могут или не могут полностью понять. - person Robert; 19.03.2017

person    schedule
comment
Кроме того, мне не нужна ширина: 400 пикселей. можно без этого? - person Paul Tarjan; 13.08.2009
comment
Проблема в том, что элемент уровня блока будет расширяться, чтобы заполнить максимально возможную ширину, если вы не установите для него ограничение. - person Amber; 13.08.2009
comment
Итак, то, что я хочу сделать, невозможно? - person Paul Tarjan; 13.08.2009
comment
Возможно, кто-то знает секрет, о котором я не знаю, но, насколько мне известно, да. - person Amber; 13.08.2009
comment
Я согласен с Дав. Возможно, вы могли бы взглянуть на tinyMCE или другой редактор форматированного текста, который допускает больше настроек, чем стандартное текстовое поле HTML. К сожалению, вы можете потратить много времени с хакерским результатом. Но удачи! - person mkelley33; 13.08.2009