2012-12-15 8 views
5

Cóż mam taką prostą strukturę DIV:Jak sprawić, by wysokość jednego diva zależała od wysokości innego diva?

<div id="wrapper"> 
    <div id="1" class="block"> 
    1    
    </div> 
    <div id="2" class="block"> 
    2 
    </div> 
</div> 

JS Fiddle

Treść #1 mogą dynamicznie zmieniane przez javascript, a jego wysokość można zmienić zależała od treści. Chcę, aby #2 miał taką samą wysokość jak #1. Rozumiem, że mogę używać javascript do tego celu, ale proponuję, aby nie było tak trudnego sposobu, aby uczynić te poziomy div równymi używając tylko CSS i/lub zmieniając pozycjonowanie div w jaki sposób.

+1

Nie, nie semantycznie. To, czego chcesz, to faux-kolumny, i jest tu kilka technik: http://css-tricks.com/fluid-width-equal-height-columns/ –

+0

Nie polecałbym tego, chyba że twoje dane są tabelaryczne, ale mają rozważałeś korzystanie z tabel? – Wex

Odpowiedz

7

Aby rozwinąć mój komentarz, nie można tego zrobić semantycznie. Musisz użyć małego triku, aby sfałszować 100% wzrostu. Nazywa się to faux-kolumnami i możesz przeczytać więcej: here.

W twoim przypadku, nie możemy udawać, dodając kilka div tła:

<div class="background bg1"></div> 
<div class="background bg2"></div> 

Następnie zmieniając CSS tak:

#wrapper { 
    border: 1px solid black; 
    position: relative; 
} 

#wrapper:after { 
    display: block; 
    content: " "; 
    height: 0; 
    clear: both; 
} 

.block { 
    position: relative; 
    float: left; 
    vertical-align: top; 
    width: 200px; 
    text-align: left; 
    min-height: 200px; 
    padding-left: 20px; 
    z-index: 2; 
} 

.background { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    width: 200px; 
    z-index: 1; 
} 

.bg1 { 
    background-color: #eee; 
} 

.bg2 { 
    left: 200px; 
    background-color: #aaa; 
}​ 

Oto pracuje jsFiddle.

+1

A flexbox to podobno przyszłość, pewnego dnia. http://dev.w3.org/csswg/css3-flexbox/ –

+0

Wielkie dzięki ... To dziwne, że tak prostą rzecz trzeba zrobić tak podstępnie ... – Dmytro

+0

@JaredFarrish, nie miałem widziałem to. Wygląda bardzo obiecująco, powinien być częścią specyfikacji, kiedy zdecydowaliśmy się zabić projekt oparty na stole: p –

1

Sposób jQuery: Użyj .height(), aby zwrócić wysokość Div1, a następnie po prostu użyj .css(), aby ustawić wysokość Div2 na Div1. Kiedy div zmienia się, możesz użyć zdarzenia resize, aby uruchomić funkcję, która zmieni wysokość div2.

Sposób CSS: odpowiedź Christiana Vargi wydaje się działać idealnie.

+0

Pytanie określa _only css_ though: p –

+0

Dodając do tego sposób poprzez css do mojej odpowiedzi. –

+0

Haha, ale 'height: inherit' nie robi tego, co myślisz, że robi. –