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

У меня есть вложенный <div id="tituloParametros>", и мне нужно, чтобы его текст / содержание было центрировано по вертикали и горизонтали.

Это моя разметка:

<div id="outer">

        <div id="parametros">
        <div id="tituloParametros">Ingresa los puntos conocidos x,f(x)</div>
        </div>

        <div id="resultados">
            <div id="graficos">
                <div id="bars"></div>
                <div id="fx"></div>
                <div id="pinchetabla">Tabla inútil</div>
            </div>
            <div id="loquerealmenteimporta"></div>  
        </div>

</div>

А это примененный CSS:

#outer{

  padding-left: 15px;
  padding-top: 15px;
  width: 1350px; 
  height: 640px;
}

#parametros {
  float:left;
  width: 20%;
  height: 100%;
}
      #tituloParametros {
        height: 9%;
        width: 100%;
        background-color: red;
        text-align:center;
        vertical-align:middle
      }

#resultados {
  float:right;
  width: 80%;
  height: 100%;
}

      #graficos {
        height: 75%;
        width: 100%;
      }

          #bars {
            float: left;
            height: 100%;
            width: 30%;
          }

          #fx {
            float: left;
            height: 100%;
            width: 30%;
          }          

          #pinchetabla {
            float: left;
            height: 100%;
            width: 40%;
          }

      #loquerealmenteimporta {
        height: 25%;
        width: 100%;
      }

Я думал так:

text-align:center;
vertical-align:middle

Оба сделают это, но этого не произошло. Добавление display: table-cell; тоже не решает эту проблему, оно фактически обрезает фон до границ текста.

Вот как это выглядит

1
diegoaguilar 15 Мар 2014 в 23:44

3 ответа

Лучший ответ

Вы правы - подход table / table-cell не работает здесь.

В качестве альтернативы вы можете прибегнуть к методу абсолютного позиционирования. Элемент будет центрирован по вертикали, когда значение top будет 50% вычтено на половину высоты элемента. В этом случае это не должно быть проблемой, потому что высота уже установлена ​​с помощью единицы измерения %. 100% - 50% - 9% * .5 = 45.5% Если бы это было не так, вы могли бы использовать calc() или отрицательные поля для вычитания блок px из блока %. В этом случае стоит отметить, что дочерний элемент абсолютно расположен относительно родительского элемента.

Обновленный CSS - ОБНОВЛЕННЫЙ ПРИМЕР ЗДЕСЬ

#parametros {
    float:left;
    width: 20%;
    height: 100%;
    outline : 1px solid black;
    position:relative;
}
#tituloParametros {
    background-color: red;
    width: 100%;
    height: 9%;
    text-align:center;
    position:absolute;
    top:45.5%
}

Элемент #tituloParametros теперь центрирован внутри родительского элемента. Если вы хотите центрировать текст внутри него, вы можете обернуть текст элементом span, а затем использовать подход вертикального центрирования table / table-cell:

ОБНОВЛЕННЫЙ ПРИМЕР ЗДЕСЬ

#tituloParametros {
   /* other styling.. */
    display:table;
}
#tituloParametros > span {
    display:table-cell;
    vertical-align:middle;
}
2
Josh Crozier 16 Мар 2014 в 00:15
Ой! Ну, я хочу, чтобы текст был сосредоточен только в его нижнем div, а не такой div, центрированный на его внешнем элементе :)
 – 
diegoaguilar
16 Мар 2014 в 00:21
Кажется, я неправильно понял! Тогда вы можете просто использовать эту вторую часть. Вот обновленный пример. Это лучше, чем решение line-height, поскольку оно будет работать с динамическая высота..
 – 
Josh Crozier
16 Мар 2014 в 00:22
Спасибо, вы очень помогли. Кстати, какое программное обеспечение для Linux (а не Dreamweaver или подобное) помогло бы при разработке более сложных макетов, которые вы бы порекомендовали?
 – 
diegoaguilar
16 Мар 2014 в 00:27
1
Я бы точно не смог на это ответить. Я сделал всю свою разработку с помощью блокнота Windows по умолчанию и инструмента разработчика Google Chrome. Sublime text — хороший редактор, если вам нужна подсветка синтаксиса. Он хорош для PHP.
 – 
Josh Crozier
16 Мар 2014 в 00:29

Вот мое исправление! :::: HTML:

<div id="parametros">
<div id="tituloParametros"><p>Ingresa los puntos conocidos x,f(x)</p></div>
</div>

CSS:

  #tituloParametros {
            height: 70px;
            width: 100%;
            background-color: red;
            text-align:center;
            vertical-align:middle
          }
          #tituloParametros p{
            line-height: 70px;
          }
1
nodefault 15 Мар 2014 в 23:56
Что, если я всегда использую проценты для divs height и width
 – 
diegoaguilar
16 Мар 2014 в 00:17
<html>
<head>
  <title>Universal vertical center with CSS</title>
  <style>
    .greenBorder {border: 1px solid green;} /* just borders to see it */
  </style>
</head>

<body>
  <div class="greenBorder" style="display: table; height: 400px; #position: relative; overflow: hidden;">
    <div style=" #position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
      <div class="greenBorder" style=" #position: relative; #top: -50%">
        any text<br>
        any height<br>
        any content, for example generated from DB<br>
        everything is vertically centered
      </div>
    </div>
  </div>
</body>
</html>

Вот демо http://www.jakpsatweb.cz/css/priklady /vertical-align-final-solution-en.html

0
Yogender Solanki 16 Мар 2014 в 13:15