2013-05-23 3 views
3

고정 된 높이의 컨테이너가 있습니다. 내부에는 이미지와 그 아래에 임의의 길이의 텍스트라는 두 개의 하위가 있습니다. 텍스트가 필요한 높이를 차지하고 이미지가 나머지 공간까지 자동 조정되기를 원합니다. 여기 CSS 만 사용하여 형제 크기에 따라 HTML 요소의 크기를 동적으로 조정하는 방법은 무엇입니까?

내가 가진 시작 코드 :

여기

http://jsfiddle.net/LLsT8/1/

<div id="parent"> 
<div> 
    <img src="http://placehold.it/250x250&amp;text=2" /> 
</div> 
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut </div> 
</div> 

는 자바 스크립트 솔루션입니다,하지만 난 그게 CSS 전용 될 수 있는지 궁금하네요.

http://jsfiddle.net/LLsT8/2/

업데이트 : bfuoco의 솔루션은 내가 필요한 매우 가까이이지만, 파이어 폭스에서 작동하지 않습니다.

http://jsfiddle.net/8S6Kf/1/

+0

가장 오래된 브라우저는 무엇입니까?CSS에서 플렉스 박스 속성 (CSS가 아니라 애드온이 아닌)을 사용하면 쉽게이 작업을 수행 할 수 있지만 ie10 이전의 IE에서는 지원되지 않습니다. – Deborah

+0

@DeborahSpeece, 매우 흥미 롭습니다. 그러나 실제로 flexbox를 사용하여 얻을 수 있습니까? 코드 예제를 제공 할 수 있습니까? 감사. – Paker

답변

3

나는이에 대한 display 속성의 tabletable-row 값을 사용하는 것이 좋습니다 것입니다.

image-wrapper와 text 요소는 모두 테이블 행이므로 확장하여 테이블의 전체 영역을 채 웁니다. 이미지 래퍼는 높이 100 %로 설정되어 있으므로 왼쪽 여백을 소비합니다.

이미지 요소는 이미지 래퍼 내에 중첩되어 있으며 너비/높이 100 %로 설정되어 있으므로 부모와 동일한 차원을 사용합니다. 여기

이 바이올린입니다 : http://jsfiddle.net/8S6Kf/1/

HTML

<div class="parent"> 
    <div class="image-wrapper"> 
     <img class="image" src="http://placehold.it/250x250&amp;text=2" /> 
    </div> 

    <div class="text"> 
     A line of text. 
    </div> 
</div> 

CSS

.parent { 
    display: table; 
    height: 250px; 
    width: 250px; 
} 

.image-wrapper { 
    display: table-row; 
    height: 100%; 
} 

.image { 
    width: 100%; 
    height: 100%; 
} 

.text { 
    display: table-row; 
} 

업데이트

,

FF/IE에서는 작동하지 않습니다. 이 특정 문제에 대해서는 실제 이미지를 div로 대체하고 background-image 속성을 사용할 수 있습니다. 또한 이미지를 표 셀로 만들어야합니다. 그렇지 않으면 테이블을 렌더링하지 않습니다.

다음은 이미지를 늘리지 않는 예입니다.

http://jsfiddle.net/8S6Kf/7/

HTML

<div class="image"></div> 

CSS

.image { 
    display: table-cell; 
    height: 100%; 
    width: auto; 

    background-image: url(http://placehold.it/250x250&amp); 
    background-size: 100% 100%; 
} 

이미지의 크기를 유지하려면, 당신은 다른 방법이 배경 속성을 사용할 수 있습니다

background-size: contain; 
background-repeat: no-repeat; 
+0

내가 원하는 것을 정확하게 보입니다! 고마워요. http://jsfiddle.net/8S6Kf/3/ (조정할 이미지 너비 만 변경) 물론 테이블은 레이아웃 용으로 설계된 것이 아니지만 반쪽 빵은 빵이없는 것보다 낫습니다. – Paker

+1

표 표시 유형을 사용하면 매우 유용합니다. 오래된 옛날에, 테이블 ('

')은 브라우저가 좋은 CSS 지원으로 나이가 들었으므로 더 이상 실용적이지 않은 전체 페이지를 레이아웃하는 데 사용되었습니다. 디스플레이 유형을 테이블, 테이블 셀 등으로 변경하는 것은 최신 CSS 기능을 최대한으로 사용하기 때문에 꽤 괜찮습니다. 그것은 실제로 내용을 디스플레이에서 분리하는 좋은 방법입니다. –

+1

레이아웃을 위해 테이블을 사용할 때의 원래의 문제점은

태그가 의미 적 의미와 다른 용도로 사용되고 있다는 것이 었습니다. 즉, "도표화 된 데이터"를 나타내지 만 표현을 위해 사용되고있었습니다. div 태그에는 의미 론적 의미가 없기 때문에 이것은 괜찮습니다. 나는 그것을 "테이블처럼 보이는 일반적인 블록 요소"라고 읽었다. 나는 당신이 무엇을 의미하는지 안다. 나는 '높이 : 채우기'처럼 더 우아한 것을 선호 할 것이다. – bfuoco

관련 문제