CSS: центральний блок, але вирівняйте вміст ліворуч


81

Я хочу, щоб цілий блок був відцентрований у його батьківському елементі, але я хочу, щоб вміст блоку було вирівняно за лівим краєм.

Найкраще служать приклади

На цій сторінці:

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 + Нью-Йорк + Янкі% 2c% 0d% 0a ++++ Атланта + Бравс +% 5d% 0d% 0a% 3a +% 5b + 2001-07-02% 2c + 2001-08-12% 2c% 0d% 0a ++++ 2001-08-14 +% 5d% 0d% 0a

повідомлення про помилку повинно вирівнюватися так само, як у консолі.

Відповіді:


163

По-перше, створіть батька, 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>


5
Чіткий та ефективний. Дякую!
fuzzybear3965

11
не працює, оскільки як тільки один рядок тексту не поміщається в один рядок, він обгортає текст і призводить до того, що блок має повну ширину, але текст менше повної ширини, тому, хоча блок по центру, це не робить Не має значення, оскільки текст - це НЕ повна ширина блоку, що містить. Як приклад дивіться діаграму 2а stackoverflow.com/questions/8702802 / ...
user3338098

Просто і красиво! Подяка
Сезар Біліч

3
@ user3338098 Це працює, у вашому випадку вам потрібно встановити максимальну ширину тексту, щоб зупинити розширення блоку до небажаного розміру. Я буквально щойно застосував цією ж логікою свою роботу і зміг досягти схеми 1b + 2b.
Марк

20

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

Якщо припустити, що елемент, який плаває і буде відцентрований, є 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


Також чудово працює з істотою "обтікання" preта "вмістом" code.
Serge Stroobandt

не працює, оскільки як тільки This will be centeredне поміщається в один рядок, він обгортає текст і призводить до того, що блок має повну ширину, але текст менше повної ширини, тому, хоча блок відцентрований, це не має значення, оскільки text - це НЕ повна ширина блоку, що містить. Для прикладу зверніться до діаграми 2a stackoverflow.com/questions/8702802/… .
user3338098

Намагайтеся уникати використання негативних значень! Це буде працювати некоректно у всіх браузерах.
Grasper

4

Якщо я вас добре розумію, вам потрібно використати для центрування контейнера (або блокування)

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

і вирівняти ліворуч його вміст:

text-align: left;

отже, що я ставлю на свої <pre> та <code>? Я спробував варіанти цього, але не вдалося.
Paul Tarjan

ти намагався використовувати клас css?
eKek0

також, ви можете використовувати контейнер div для> pre>
eKek0

2
Я пробую контейнер div, і єдиний спосіб змусити його працювати - це фіксована ширина (чого я не хочу).
Paul Tarjan

2

Зазвичай ви повинні використовувати margin: 0 auto на div, як зазначено в інших відповідях, але вам доведеться вказати ширину для div. Якщо ви не хочете вказувати ширину, ви можете використовувати (це залежить від того, що ви намагаєтесь зробити) поля, щось на зразок margin: 0 200px; , це повинно зробити так, щоб ваш вміст здавався таким, ніби він відцентрований, ви також можете побачити відповідь Лею на моє запитання


на жаль, ваше рішення створює переповнення примусовою горизонтальною смугою прокрутки. Додавання переповнення: прихований для батьківського елемента не є гарним, оскільки мій результат може бути достатньо довгим, щоб забезпечити смугу прокрутки. Вибачте :(
Paul Tarjan

Насправді це не моє рішення, як я згадував, але в будь-якому випадку, я не розумію, що ви маєте на увазі під переповненням: приховані примусові смуги прокрутки, вони повинні приховувати вміст, а не змушувати смуги прокрутки.
Waleed Eissa

Рішення у вашому дописі спричиняє горизонтальну смугу прокрутки, оскільки вміст фактично зміщений на 50% вправо. Це вимагає переповнення: hidden, щоб видалити, що не працює для мене.
Paul Tarjan,

2

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

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
}

Сподіваюся, це саме те, що ви шукали, оскільки мені знадобилося чимало пошуків, щоб лише з’ясувати це досить базове рішення.


1
<div>
    <div style="text-align: left; width: 400px; border: 1px solid black; margin: 0 auto;">
         <pre>
Hello
Testing
Beep
         </pre>
    </div>
</div>

також, я не хочу ширину: 400px. можливо без цього?
Paul Tarjan

Проблема полягає в тому, що елемент рівня блоку буде розширюватися, щоб заповнити якомога більшу ширину, якщо ви не встановите обмеження на нього.
Бурштин

отже, те, що я хочу зробити, неможливо?
Paul Tarjan

Можливо, хтось знає таємницю, якої я не знаю, але, наскільки мені відомо, так.
Бурштин

Я згоден з Давом. Можливо, ви можете поглянути на tinyMCE або інший текстовий редактор, що дозволяє більше налаштувати, ніж стандартна текстова область HTML. На жаль, ви можете в кінцевому підсумку витратити багато часу з хакерським результатом. Хоч удачі!
mkelley33

1

Це те, що ви шукаєте? 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>


-1

ЦЕ працює

<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>

3
Чи можете ви пояснити свій код та його переваги та недоліки? Таким чином інші можуть навчитися на цьому, а не просто копіювати та вставляти те, що вони можуть або не можуть зрозуміти повністю.
Роберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.