2015-05-19 2 views
0

У меня есть фиксированное положение #header с X из .child элементов в нем с высотой 19 пикселей и скрытым переполнением. #header имеет :hover, который меняет высоту на max-height (поэтому он расширяется с элементами .child) и с анимацией transition: max-height 0.2s 1s ease;. (фиксированные divs не могут манипулировать divs вокруг по мере его роста или сжатия), поэтому я хотел бы сделать position: relative div ниже #header, который имеет ту же самую высоту контента, что и #header, которая растет или сжимается то же самое время, что и #header:hover, но может перемещать другие divs под ним с анимацией.Получить общую длину дочерних элементов для дублирования

Я нашел способ на других сообщениях в Stackoverflow, который почти сделал трюк see JSFIDDLE, за исключением того, что он подсчитывает все высоты элементов .child. Мне нужна только высота #parent, но это max-height не фиксированная высота.

[обновление] РЕШЕННЫЕ благодаря @ Joel-Алмейд Поскольку ДИВ имел короткозамкнутую высоту и скрытый перелив не удалось прочитать высоту DIV, но с добавленным .scrollHeight он может прочитать высоту div независимо от того, видна ли она скрытой.

+0

Вы можете подбросить jsfiddle пример –

+0

@ СЕТ-mcclaine Существует jsfiddle примера StackOverflow, но я думаю, что его уже решенные спасибо за участие! – 807

ответ

4

Зачем рассчитывать всю высоту детей, когда вы можете сразу получить родительскую высоту?

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

$(function(){ 
 
    var totalHeight = 0; 
 
    totalHeight = $('#parent')[0].scrollHeight; 
 
    alert("Total height of all divs: " + totalHeight); 
 
    $(".clonechild").height(totalHeight); 
 
});
#parent { 
 
    float: left; 
 
    width: 500px; 
 
    background-color: #e0e0e0; 
 
} 
 
#parent .child { 
 
    float:left; 
 
    height:100px; 
 
    width:100px; 
 
    background-color:#666; 
 
    box-sizing:border-box; 
 
    -moz-box-sizing:border-box; 
 
    -webkit-box-sizing:border-box; 
 
    border: 1px solid black; \t 
 
} 
 
#parent .child , .clonechild p { 
 
    font-size: 14px; 
 
    color: #fff; 
 
    text-align: center; 
 
} 
 
     #cloneparent { 
 
      position: absolute; 
 
      margin: 300px auto auto 0px; 
 
      width: 510px; 
 
      background-color: #e0e0e0; 
 
     } 
 
     #cloneparent .clonechild { 
 
      float:left; 
 
      min-height:100px; 
 
      height: ; 
 
      width:100px; 
 
      background-color:#666; 
 
      box-sizing:border-box; 
 
      -moz-box-sizing:border-box; 
 
      -webkit-box-sizing:border-box; 
 
      border: 1px solid black; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="parent"> 
 
    <div class="child"><p>1</p></div> 
 
    <div class="child"><p>2</p></div> 
 
    <div class="child"><p>3</p></div> 
 
    <div class="child"><p>4</p></div> 
 
    <div class="child"><p>5</p></div> 
 
    <div class="child"><p>6</p></div> 
 
    <div class="child"><p>7</p></div> 
 
    <div class="child"><p>8</p></div> 
 
</div> 
 
<p>__#parent clearly not 800px height</p> 
 
<div id="cloneparent"> 
 
    <div class="clonechild"><p>this needs to be the same height as #parent</p></div> 
 
    <p>__#cloneparent clearly not same height as #parent</p> 
 
</div>

+0

Я думаю, что делает трюк! Я предположил, что вам нужно установить высоту, чтобы читать его, но, по-видимому, он может вычислять высоту элемента без его установки на число. Спасибо, что посмотрели! – 807

+1

@ 807 'outerHeight()' получает ** вычисленную высоту **, поэтому не имеет значения, если вы ее установили или нет, это то, что браузер делает :) –

+0

После некоторого вовлечения я получил его на работу, он было немного сложно, потому что у него было скрытое переполнение. Я получил его для работы с атрибутом .scrollHeight ', изменил код на:' totalHeight = $ ('# parent') [0] .scrollHeight; ' вместо .outerHeight. – 807

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