100% не работает

0

У меня проблема с возрастной проблемой 100% высоты. Я знаю, что эту проблему много задают, и я рассмотрел это, это, это и бесчисленное множество. Я хочу создать базовый фиксированный заголовок, боковую навигацию и главную область статьи, которая выглядит так:

Изображение 174551

Но по какой-то причине он выглядит следующим образом (я положил 200px padding в синем баре, чтобы он появился).

Изображение 174551

Мой HTML выглядит следующим образом:

<!DOCTYPE html>
<html>
<head></head> 
<body>

<header></header>

<section>

<nav></nav>

<article></article>

</section>

</body>
</html>

И мой CSS выглядит так:

* { -moz-box-sizing: border-box; background-color: transparent; border: 0 none; color: #000000; list-style: none outside none; margin: 0; outline: medium none; padding: 0; text-decoration: none; }

body, html { height: 100%; } 

header {
  background: #6c6363;
  top: 0;
  z-index: 100;
  height: 100px;
  left: 0;
  position: fixed;
  right: 0;
}

section {
  min-height: 100%;
  overflow: auto;
  position: relative;
  padding-top: 100px;
}

nav {
  background-color: #747feb;
  float: left;
  min-height: 100%;
  padding-bottom: 200px;
  width: 150px;
}

article {
  background: #74eb8a;
  margin: 20px 20px 20px 170px;
  min-height: 100%;
  padding: 20px;
  position: relative;
}

Как вы можете видеть, ничего особенного. Я знаю, что section нуждается в 100% -ной высоте, а также body и html. Я могу полностью позиционировать nav и acticle и сделать что-то вроде этого:

Изображение 174551

Но на моем фактическом сайте (я упростил это для этого) боковая навигация имеет выпадающие списки, которые будут динамически изменять высоту навигации. Это приводит к следующему:

Изображение 174551

Абсолютно позиционированные элементы не изменят высоту относительной обертки, поэтому мне нужно их плавать. Тем не менее, плавание их не делает высоту 100%.

Я даже сделал JSFiddle, чтобы показать проблему: http://jsfiddle.net/g8VjP/

Если кто-нибудь может мне помочь, я буду очень благодарен.

Спасибо!

PS: Я использую calc(), если он работает!

РЕШЕНИЕ

Я изменил ответ Майанка и сумел придумать решение. Мне пришлось добавить пару оберток, но это сработало. Теперь мой HTML выглядит так:

<!DOCTYPE html>
<html>
    <head></head> 
<body>

<header></header>

<section>

<nav></nav>

<div class="cell-wrap">
    <div class="table-wrap">
        <article></article>
    </div>
</div>

</section>

</body>

</html>

С ключом является cell-wrap и table-wrap. У меня nav - это одна таблица-ячейка, а .cell-wrap - другая. Когда nav имеет фиксированную связь, .cell-wrap заполняет остальные. Тем не менее, я хочу, чтобы расстояние вокруг article, поэтому я добавил. .table-cell и сделал это в таблицу. Затем он расширяет и заполняет высоту и ширину .cell-wrap. Затем я добавляю 30px padding, чтобы дать пространство вокруг article (поскольку поля не работают на table-cells) и сделал article ячейкой таблицы.

Немного запутанный, но он работает!

Мой CSS выглядит следующим образом:

* { -moz-box-sizing: border-box; background-color: transparent; border: 0 none; color: #000000; list-style: none outside none; margin: 0; outline: medium none; padding: 0; text-decoration: none; }

body, html { height: 100%; } 

header {
  background: #6c6363;
  top: 0;
  z-index: 100;
  height: 100px;
  left: 0;
  position: fixed;
  right: 0;
}

section {
  display: table;
  height: 100%;
  min-height: 100%;
  padding-top: 100px;
  position: relative;
  width: 100%;
}

nav {
  background-color: #657182;
  display: table-cell;
  min-height: 100%;
  width: 150px;
}

.cell-wrap {
  display: table-cell;
  height: 100%;
  min-height: 100%;
}

.table-wrap {
  display: table;
  height: 100%;
  padding: 30px;
  width: 100%;
}

article {
  background: none repeat scroll 0 0 #FFFFFF;
  display: table-cell;
  min-height: 100%;
  padding: 20px 20px 120px;
  z-index: 1;
}

Здесь скрипка. Не уверен, почему в ней есть полоса прокрутки внизу, но, кажется, это нормально, если вы просто показываете ее в своем браузере.

Теги:

3 ответа

1
Лучший ответ

display:table and display:tabel-cell, вы друзья здесь, друг!
Обновил вашу скрипку до небольших обходных решений, и вот вы: DEMO

CSS для изменения:

section {
    min-height: 100%;
    overflow: auto;
    position: relative;
    padding-top: 100px;
    display:table;/* addition */
}
article {
    background: #74eb8a;
    margin: 0px 20px 0px 170px;
    min-height: 100%;
    width:100%;
    height: 100%;
    position: relative;
    display:table-cell; /* addition */
 }

Кроме того, я взял на себя смелость удалить дополнительное padding которое вы разместили внутри article, вставить div или section внутри article и назначить для него дополнение, если оно работает!

  • 0
    Это не сработало для меня, но привело меня в правильном направлении, чтобы решить мою проблему. Я бы никогда не подумал об использовании таблиц и табличных ячеек. Мне это кажется таким хакерским! Но это сработало! Смотрите вопрос для решения. Еще раз спасибо!
  • 0
    добро пожаловать ... нет проблем !! :)
3

height: 100% означает 100% от height блока. Ваш блок, section, не имеет определенной height (но вместо этого min-height). Вы также можете:

  1. Изменить min-height: 100% от section к height: 100%. или...
  2. Держите min-height: 100% и добавьте height: 1px (или что-нибудь менее 100%), которое будет переопределено min-height.

Ключ здесь - иметь свойство height заданное родительским.

0

попробуй это:

nav {
  background-color: #747feb;
  width: 150px;
  position : absolute;
  top : 100px;
  left : 0;
  bottom : 0;
}

 article {
  background: #74eb8a;
  position: absolute;
  top : 100px;
  left : 150px ; /* nav width*/
  bottom : 0;
  right : 0;
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню