2013-03-01 17 views
4

Я потратил буквально часы, пытаясь разобраться в этом, поэтому пришло время спросить.Почему этот CSS не работает в Firefox?

Я сказал, что на что-то есть height: x% (а высота в процентах) это родитель должен иметь высоту, как и его родителей и т.д.

Так вот моя структура:

html 
    body 
    div#wrapper 
     div#viewer_wrapper 
     iframe#viewer 

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

html, body{ 
    height: 100%; 
} 
#wrapper{ 
    min-height: 100%; /*it's this that seems to trip me up - a fixed height works for the problem, but not for the layout obviously*/ 
    position: relative; 
} 
#viewer_wrapper { 
    height: 100%; 
    position: relative; 
} 
#viewer { 
    width: 100%; 
    height: 96%; 
} 

Chrome очень послушный - даже без height:100% на #viewer_wrapper, у меня нет проблем. Но в Firefox и IE iframe отказывается брать 96% от высоты экрана (чего я хочу). Я даже попробовал кучи исправлений JS, все из которых приводят не только к уродливому коду, но и к плохим побочным эффектам.

Спасибо за любую помощь.

+0

Попытка создать [скрипку] (http://jsfiddle.net), чтобы люди могли испытать его. – Passerby

+0

@Passerby, так как это вопрос, который потребует от вас открытия сайта на всей странице, проще просто указать URL-адрес. – stackunderflow

+0

Правильный адрес? – abhijit

ответ

1

Мне кажется, что вы хотите разделить ваш #wrapper на две части.

Верхняя часть, содержащая все, кроме #viewer_wrapper, должна иметь свою естественную высоту. нижняя часть, содержащая #viewer_wrapper, должна иметь высоту: 100%.

HTML

<div id="wrapper"> 
    ... 
</div> 
<div id="wrapper2">  
    <div id="viewer_wrapper"> 
     ... 
    </div> 
</div> 

CSS

#wrapper2 { height:100%; } 
#wrapper, #wrapper2 { 
    width:70%; 
    position:relative; 
    padding:4px 10px; 
    margin:0 auto; 
    background:whiteSmoke; 
    border-left:2px solid black; 
    border-right:2px solid black; 
    -webkit-box-sizing:border-box; -moz-box-sizing:border-box; 
    box-sizing:border-box; 
} 
+0

Большое спасибо! Я поражен тем, насколько сложной была такая простая задача, но ваше решение логично. – stackunderflow

+0

Есть причина, почему ни один из S в CSS не означает «простой» ...: P –

0

Да, его родителям необходимо иметь height, а не min-height.

+0

Как я могу достичь этого, не нарушая макет? – stackunderflow

+0

Я не видел ваш макет, но, скорее всего, заменив min-height на #wrapper высотой. – reisio

+0

, просто «высота: 100%;» нарушает мой макет. Веб-адрес моего сайта находится в нижней части вопроса. – stackunderflow

0

Как я только понял, что именно вы хотите сделать, вы можете использовать что-то вроде этого:

<div id="viewer_wrapper"> 
    <div id="top">Something on the top</div> 
    <iframe></iframe> 
</div> 

и этот CSS:

#viewer_wrapper { 
    position: absolute; 
    z-index: 100; 
    width: 100%; 
    top: 200px; /* Some number that fits to the content on the top. */ 
    bottom: 0; 
} 

Для меня это работает, как с высотой 100% и высотой 96%. Но в целом лучше не использовать min-height. Вместо этого используйте height и overflow: visible;. И обратите внимание, что padding s и margin s могут быть разными, поэтому установите их в значение (возможно 0).

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

+0

* вздох * 'высота: 100%; overflow: visible; 'on' # wrapper' исправляет проблему, но разбивает мой макет. Почему это так сложно? – stackunderflow

+0

Это не так сложно. Это основная задача веб-дизайна, чтобы ваша разметка работала во всех браузерах. Вы пытались добавить «переполнение: видимо»? И это тоже ломает ваш макет? Как, собственно, это испортит ваш макет? – Sheric

+0

Потому что, если вы измените 'min-width: 100%' на 'width: 100%', при прокрутке вниз белый фон, расположенный за содержимым страницы, исчезнет. – stackunderflow

0

no point установка min-height до 100%, это действительно не имеет смысла.

Вместо этого можно использовать мин/макс высоты, как это:

#wrapper{ 
    min-height:50%;max-height: 100%; 
    position: relative; 
} 

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

вот скрипка с относительными значениями, http://jsfiddle.net/zB2Za/ и скрипка с исправлением http://jsfiddle.net/zB2Za/2/

Если вы хотите содержимое страницы в «заливку» вся странице, а затем установить поля и отступы для тела 0, это показано во второй скрипке.

+0

Для моего макета я хочу, чтобы '# wrapper' занимал всю страницу, иначе это выглядит неправильно. – stackunderflow

+0

установка высоты до 100% делает это. как показано здесь http://jsfiddle.net/zB2Za/2/ – lukeocom

+0

Но если страница больше 100% окна просмотра, она разбивается. Если вы перейдете на мой сайт, измените 'min-width: 100%' на 'width: 100%' на '# wrapper' в своих инструментах dev и прокрутите вниз, вы увидите, что я имею в виду. – stackunderflow

Смежные вопросы