html div Позиция: абсолютная и родительская высота?




body tag in html (4)

У меня есть несколько контейнеров, и их дети только абсолютны / относительно расположены. Как установить высоту контейнера, чтобы их дети были внутри них?

Вот код:

HTML

<section id="foo">
    <header>Foo</header>
    <article>
        <div class="one"></div>
        <div class="two"></div>
    </article>
</section>    

<div style="clear:both">Clear won't do.</div>
<!-- I want to have a gap between sections here -->

<section id="bar">
    <header>bar</header>
    <article>
        <div class="one"></div><div></div>
        <div class="two"></div>
    </article>
</section>  

CSS

article {
    position: relative;
}

.one {
    position: absolute;
    top: 10px;
    left: 10px;
    background: red;
    width: 30px;
    height: 30px;
}

.two {
    position: absolute;
    top: 10px;
    right: 10px;
    background: blue;
    width: 30px;
    height: 30px;
}

Вот jsfiddle. Я хочу, чтобы текст «бар» отображался между 4 квадратами, а не позади них.

http://jsfiddle.net/Ht9Qy/

Любые простые исправления?

Обратите внимание, что я не знаю высоты этих детей, и я не могу установить height: xxx для контейнеров.


Answer #1

Это еще один поздний ответ, но я понял довольно простой способ разместить текст «бар» между четырьмя квадратами. Вот изменения, которые я сделал; В разделе bar я завернул текст «bar» в центре и теги div.

<header><center><div class="bar">bar</div></center></header>

И в разделе CSS я создал класс «bar», который используется в теге div выше. После добавления этого текста штрих-код был центрирован между четырьмя цветными блоками.

.bar{
    position: relative;
}

Answer #2

Это поздний ответ, но, посмотрев исходный код, я заметил, что когда видео полноэкранное, класс «mejs-container-fullscreen» добавляется в элемент «mejs-container». Таким образом, можно изменить стиль, основанный на этом классе.

.mejs-container.mejs-container-fullscreen {
    // This rule applies only to the container when in fullscreen
    padding-top: 57%;
}

Кроме того, если вы хотите сделать свою медиа-среду MediaElement с помощью CSS, ниже это отличный трюк Криса Койера: http://css-tricks.com/rundown-of-handling-flexible-media/

Просто добавьте это в свой CSS:

.mejs-container {
    width: 100% !important;
    height: auto !important;
    padding-top: 57%;
}
.mejs-overlay, .mejs-poster {
    width: 100% !important;
    height: 100% !important;
}
.mejs-mediaelement video {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: 100% !important;
    height: 100% !important;
}

Я надеюсь, что это помогает.


Answer #3

Вот мое обходное решение,
В вашем примере вы можете добавить третий элемент с «одинаковыми стилями» .one и .two элементов, но без абсолютной позиции и со скрытой видимостью:

HTML

<article>
   <div class="one"></div>
   <div class="two"></div>
   <div class="three"></div>
</article>

CSS

.three{
    height: 30px;
    z-index: -1;
    visibility: hidden;
}

Answer #4

Если я понимаю, что вы пытаетесь сделать правильно, я не думаю, что это возможно с помощью CSS, сохраняя при этом детей абсолютно позиционируемыми.

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

Если вам действительно нужно было добиться этого, сохраняя детей как position: absolute , вы можете сделать это с помощью JavaScript, указав высоту абсолютно позиционированных детей после их рендеринга и используя это, чтобы установить высоту родителя.

В качестве альтернативы просто используйте float: left / float:right и margin, чтобы получить тот же эффект позиционирования, сохраняя при этом данные в потоке документа, затем вы можете использовать overflow: hidden в родительском (или любом другом методе clearfix), чтобы вызвать его рост расширяться до уровня своих детей.

article {
    position: relative;
    overflow: hidden;
}

.one {
    position: relative;
    float: left;
    margin-top: 10px;
    margin-left: 10px;
    background: red;
    width: 30px;
    height: 30px;
}

.two {
    position: relative;
    float: right;
    margin-top: 10px;
    margin-right: 10px;
    background: blue;
    width: 30px;
    height: 30px;
}






absolute