CSS, центрированный div, сжать, чтобы соответствовать? - PullRequest
64 голосов
/ 27 марта 2009

Вот что я хочу:

text text text text text text text text text text text
text text text text text text text text text text text
                   +-----------+
                   | some text |
                   +-----------+
text text text text text text text text text text text
text text text text text text text text text text text

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

Я НЕ хочу устанавливать явную ширину для div. Я не хочу устанавливать min-width или max-width либо; как я уже сказал, если в одной строке слишком много текста без переноса, то все в порядке, если он переносится.

Ответы [ 9 ]

71 голосов
/ 27 марта 2009

Элементы DIV по умолчанию являются блочными, что означает, что они автоматически получают ширину 100%. Чтобы изменить это, используйте этот CSS ...

.centerBox {
  display:inline-block;
  text-align:center;
}


<div class="centerBox">
  Some text
</div>

РЕДАКТИРОВАТЬ : обновлено использование класса CSS, а не встроенного атрибута, и изменено «блок» на «встроенный блок»

6 голосов
/ 15 июня 2012

Я не знаю, решения здесь кажутся частично правильными, но тогда они действительно не работают. Основываясь на ответе Джоша Стодолы, вот кросс-браузерное решение, протестированное в Firefox, Safari, Chrome и IE 7, 8 и 9

CSS:

body {
    text-align: center;
}

#centered-div {
    text-align: left;
    background: #eee;

    display: inline-block;

    /* IE7 bs - enables inline-block for div-elements*/
    *display: inline;
    zoom: 1;
}

Markup:

<div id="centered-div">
    Cum sociis natoque penatibus et magnis dis<br />
    parturient montes, nascetur ridiculus mus.
</div>

Чтобы добавить поддержку IE6 (вздох), добавьте _height: [yourvalue] в div. Да, с подчеркиванием.

Проверьте сами на JSFiddle: http://jsfiddle.net/atp4B/2/

6 голосов
/ 27 марта 2009
<style type="text/css">
    /* online this CSS property is needed */
    p.block {
        text-align: center;
    }
    /* this is optional */
    p.block cite {
        border: solid 1px Red;
        padding: 5px;
    }    
</style>

<p>Some text above</p>
<p class="block"><cite>some text</cite></p>
<p>Some text below</p>

Подсказка : не использовать DIV для текстовых блоков (для SEO и лучшей семантической цели)

5 голосов
/ 27 марта 2009

Реквизит Джошу Стодоле, хотя он не совсем прав. Необходимое свойство:

display: inline-block;

Который решил мою проблему. Yay!

2 голосов
/ 23 июня 2015

Я рекомендую flexbox ! Посмотрите, что возможно на этом сайте, решается с помощью flexbox .

Это довольно новый продукт, но он работает во всех основных современных браузерах (IE10 использует -ms- префикс, IE11 +, Firefox 31+, Chrome 31+, Safari 7+, ...) .

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

parent {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
}

Убедитесь, что этот родитель на самом деле имеет 100% высоты. Возможно, вам также придется установить body и html на 100% высоты.

Мою реализацию этого можно увидеть на моем личном сайте, http://pgmann.cf.

2 голосов
/ 02 июня 2013

Вот пример, который я сделал именно из того, что вы ищете:
(jsFiddled здесь: http://jsfiddle.net/yohphomu/)

Предупреждение:

Если я правильно понимаю ваш вопрос, нет необходимости задавать высоту или ширину, потому что по умолчанию установлено значение auto (при этом вы можете использовать auto), но единственная проблема в том, что если вы хотите изменить фон или поставить рамку, это сделает его больше, чем желаемое поле. Почему это так и как нам это исправить, читайте дальше.

Любой, у кого возникла эта проблема, ничего не понял (если у вас есть эта проблема и вы используете div), что-либо между тегами div считается (для целей понимания) полным набором, что означает, что в этом div есть все, что вы хотите, чтобы это обозначало (компьютеры делают то, что им говорят, а не то, что вы хотите, чтобы они делали), поэтому (например), чтобы установить выравнивание текста по центру, ему нужно все пространство строк и (в конечном итоге), если оно имело граница, это будет ограничивать все пространство, которое он использовал. Если вы понимаете это, читайте дальше, если не хорошо, я не могу вам там помочь.

Итак, теперь, когда мы понимаем, что происходит, как мы можем это исправить? Ну, нам нужна одна часть для центрирования, а другая для окраски. В моем примере я использовал div, чтобы отцентрировать его и охватить цветом. Нужен ли мне div? Я уверен, что я не сделал. Я мог бы добиться того же, используя p для центрирования (или я мог бы избавиться от p и просто использовать div). Я сделал это потому, что организовал это.

Надеюсь, это ответило на ваш вопрос. За ответ я потратил 4 года, а я - 30 минут, чтобы понять его (и я уже несколько дней изучаю CSS).

Пример:

<div class='container'>
    <div class="text">
        text text text text text text text text text text text
text text text text text text text text text text text text text text text text text
    </div>
    <div class="holder">
        <p><span>text here</span></p>
    </div>
    <div>
        text text text text text text text text text text text
text text text text text text text text text text text text text text text text text
    </div>
    </div>

Тогда CSS будет выглядеть так:

.container {
width: 500px;
height: 500px;
}
.text {
    font-size: 20px;
}
.holder {
text-align: center;


}
span {
background-color: blue;
    border: 1px solid black;
}

Примечание: я установил контейнер с заданными шириной и высотой, потому что я одновременно работал над проектом и имитировал полный экран с текстом.

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

0 голосов
/ 19 июня 2015

HTML

<div class="outerdiv">
<div class="innerdiv">
++++TEXT+++
</div>
</div>

CSS

.outerdiv{
text-align: center;
}
.innerdiv{
display: inline-block;
}
0 голосов
/ 19 декабря 2013
<style>
p.one
{
border-style:solid;
border-width:2px;
border-color:red;
display:inline-block;
}
</style>

<p class="one">some text</p>
0 голосов
/ 27 марта 2009

Как то так?

<html>
<head>
</head>
<body style="text-align: center;">

   <div style="width: 500px; margin: 0 auto;">

       <p>text text text text text text text text text text text text text text text text text text text text text text</p>

       <div>hello</div>

       <p>text text text text text text text text text text text text text text text text text text text text text text</p>

   </div>


</body>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...