Подтвердить что ты не робот

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

Есть ли способ CENTER A DIV по вертикали и горизонтали, но важно, что содержимое не будет вырезано, когда окно меньше содержимого У div должен быть цвет фона, ширина и высота.

Я всегда центрировал divs с абсолютным позиционированием и отрицательными полями, как в приведенном примере. Но у него есть проблема, что он сокращает содержание сверху. Есть ли способ центрировать div.content без этой проблемы?

У меня есть пример для игры: http://jsbin.com/iquviq/1/edit

CSS

body { margin: 0px; }

.background {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    background-color: yellow;
}

/* 
is there a better way than the absolute positioning and negative margin to center the div .content: div with background color a width and a hight?: 
*/ 


.content {
    width: 200px;
    height: 600px;
    background-color: blue;

    position:absolute;
    top:50%;
    left:50%;
    margin-left:-100px;/* half width*/
    margin-top:-300px;/* half height*/
}

HTML:

<div class="background">
    <div class="content"> some text </div>
</div>

Мой вопрос не дублируется "Как центрировать элемент по горизонтали и по вертикали?" - Мой вопрос задавали раньше. (просто проверьте даты). 2- Мой вопрос задается очень четко и черным как условие: "содержимое не будет вырезано, когда окно меньше содержимого"

4b9b3361

Ответ 1

Попробовав много вещей, я нахожу способ, который работает. Я разделяю его здесь, если он кому-то полезен. Вы можете увидеть его здесь: http://jsbin.com/iquviq/30/edit

.content {
        width: 200px;
        height: 600px;
        background-color: blue;

        position:absolute; /*it can be fixed too*/
        left:0; right:0;
        top:0; bottom:0;
        margin:auto;

        /*this to solve "the content will not be cut when the window is smaller than the content": */
        max-width:100%;
        max-height:100%;
        overflow:auto;
    }

Ответ 2

Для современных браузеров

Когда у вас есть эта роскошь. Там flexbox тоже, но это не широко поддерживается на момент написания этой статьи.

HTML:

<div class="content">This works with any content</div>

CSS

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

Поделитесь с ним далее Codepen или на JSBin

Для более старой поддержки браузера, посмотрите в другом месте этого потока.

Ответ 3

Вот демо: http://www.w3.org/Style/Examples/007/center-example

Метод (Пример JSFiddle)

CSS

html, body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
    display: table
}
#content {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}

HTML:

<div id="content">
    Content goes here
</div>

Другой метод (Пример JSFiddle)

CSS

body, html, #wrapper {
    width: 100%;
    height: 100%
}
#wrapper {
    display: table
}
#main {
    display: table-cell;
    vertical-align: middle;
    text-align:center
}

HTML

<div id="wrapper">
<div id="main">
    Content goes here
</div>
</div>

Ответ 4

Допустимый способ сделать это независимо от размера div для любого размера браузера:

   div{
    margin:auto;
    height: 200px;
    width: 200px;
    position:fixed;
    top:0;
    bottom:0;
    left:0;
    right:0;
    background:red;
   }

Живой код

Ответ 5

Я не верю, что есть способ сделать это строго с помощью CSS. Причиной является ваш "важный" квалификатор к вопросу: принудительное расширение родительского элемента с содержимым его дочернего элемента.

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

Итак, с этим HTML:

<div class="parentElement">  
  <div class="childElement">  
    ...Some Contents...  
  </div>  
</div>  

Этот CSS:

.parentElement {  
  position:relative;
  width:960px;
}
.childElement {
  position:absolute;
  top:50%;
  left:50%;
}

Этот jQuery может быть полезным:

$('.childElement').each(function(){
  // determine the real dimensions of the element: http://api.jquery.com/outerWidth/
  var x = $(this).outerWidth();
  var y = $(this).outerHeight();
  // adjust parent dimensions to fit child
  if($(this).parent().height() < y) {
    $(this).parent().css({height: y + 'px'});
  }
  // offset the child element using negative margins to "center" in both axes
  $(this).css({marginTop: 0-(y/2)+'px', marginLeft: 0-(x/2)+'px'});
});

Не забудьте правильно загрузить jQ, либо в тело под затронутыми элементами, либо в голове внутри $(document).ready(...).

Ответ 6

Вы хотите установить стиль

margin: auto;

И удалите стили позиционирования (сверху, влево, вправо)

Я знаю, что это центрирует horrizontaly, но я не уверен в вертикали!

Ответ 7

Вы можете сравнить различные методы, очень хорошо объясненные на этой странице: http://blog.themeforest.net/tutorials/vertical-centering-with-css/

Метод, который они рекомендуют, заключается в добавлении пустого плавающего элемента до того, как вы сконцентрируете контент, и очистите его. У него нет недостатка, о котором вы говорили.

Я разветкил ваш JSBin, чтобы применить его: http://jsbin.com/iquviq/7/edit

HTML

<div id="floater">
</div>

<div id="content">
  Content here
</div>

CSS

#floater {
  float: left; 
  height: 50%; 
  margin-bottom: -300px;
}

#content {
  clear: both; 
  width: 200px;
  height: 600px;
  position: relative; 
  margin: auto;
}