css calc от чего берется 100%

452
04 февраля 2017, 09:35

Откуда берется 100% в выражении

height: calc(100%-65px);

От высоты родителя? А если высота родителя явно не указана?

Answer 1

Вначале внутри функции calc() будет приведен тип — от <percentage> к <length>, затем будет вычислено выражение. Если элемент имеет значение свойства position, отличное от absolute и у родителя не задана явным образом высота, то height унаследует значение auto и результатом работы функции будет auto.

Если у элемента задан position: absolute, то его высота будет равняться 100% высоты ближайшего position: relative-родителя минус 65 пикселей.

Если ближайший родитель с position: relative так и не будет найден, то высота будет считаться от высоты body.

.container { 
  width: 100px; 
  display: inline-block; 
  vertical-align: top; 
} 
 
.container-setheight { 
  height: 200px; 
} 
 
.container-noheight { 
  height: auto; 
} 
 
.container-abs { 
  position: relative; 
} 
 
.container-abs-abs { 
   
} 
 
.first { 
  height: 10px; 
  background-color: aliceblue; 
} 
 
.second { 
  height: calc(100% - 10px); 
  background-color: yellow; 
} 
 
.container-abs .second, 
.container-abs-abs .second { 
  position: absolute; 
}
<div class="container container-setheight"> 
  Высота задана = 200 пикселей 
  <div class="first"></div> 
  <div class="second">calc(100% - 10px)</div> 
</div> 
 
<div class="container container-noheight"> 
  Высота не задана<br> 
  position: static; + position: static; 
  <div class="first"></div> 
  <div class="second">calc(100% - 10px)</div> 
</div> 
 
<div class="container container-abs"> 
  Высота не задана<br> 
  position: relative; + position: absolute; 
  <div class="first"></div> 
  <div class="second">calc(100% - 10px)</div> 
</div> 
 
<div class="container container-abs-abs"> 
  Высота не задана<br> 
  position: static; + position: absolute; 
  <div class="first"></div> 
  <div class="second">calc(100% - 10px)</div> 
</div>

READ ALSO
Qt. QUDPSocket. Реализия клиент-серверной модели

Qt. QUDPSocket. Реализия клиент-серверной модели

Написал два класса (по сути одинаковых, за исключением что класс UDPClient, имеет строку client->bind(2424);)Как реализовать обмен сообщениями между...

529
Обработка строки даты

Обработка строки даты

Пользователь вводит дату в формате 01/02/17, нужно сохранить дату в трёх переменных int соответственно-day,month,yearЯ разбивал строку с датой на 3 подстроки...

417
Динамическое выделение памяти с++

Динамическое выделение памяти с++

Вопрос заключается в необходимости оператора newОн предназначается для динамического выделения памяти, то есть во время выполнения программы,...

456
Ошибка преобразования char в int

Ошибка преобразования char в int

Имеется следующий код:

400