2012-06-26 3 views
2

여기 내 문제가 있습니다. 블록의 너비가 348px이고 오른쪽 크기가 144px이므로 이미지를 세로 가운데에 배치하고 싶습니다. 진정해? 내 문제는 내가 이미지 나 블록의 높이를 모른다는 것이다. 배경 이미지를 만들지 않고 이미지를 컨테이너의 위쪽으로 지나치게 수직으로 배치하려면 어떻게합니까?작은 컨테이너 내에서 이미지의 세로 정렬

CSS 
#block { width: 348px; position: relative; } 
#content { width: 164px; padding: 20px; margin-right: 144px; } 
#image { width: 144px; position: absolute; right: 0; } 

MARKUP 
<div id="block"> 
    <div id="image"><img url="imageurl" /></div> 
    <div id="content">Some content goes here.</div> 
</div> 

나는 그것이 얼마나 도움이 될지 모르지만 잘하면 그것은 뭔가를합니다.

+0

CSS 기반 솔루션을 사용하여이를 수행 할 수 있지만 적절한 방법은 HTML 마크 업에 따라 다릅니다. 문제에 대해 관련 HTML/CSS를 제공 할 수 없습니까? – Zuul

+0

불행히도, 그것은 단지 일반적인 질문입니다. 이것은 개인 클라이언트이며, 내용과 디자인은 공개 될 때까지는 기밀입니다. 마크 업을 제공 할 수 있으면 좋을 듯 싶습니다. 나는 일반적인 코드를 함께 던질 것이다. – Chad

답변

2

솔루션을 현재의 HTML 태그와 태그에 의해 지적은 다음과 같이 수행 할 수있는 기반 만 CSS 사용 :

working Fiddle 예를 참조를!

enter image description here

HTML

<div id="block"> 
    <div id="content">Some content goes here.</div> 
    <div id="image"> 
     <img src="path_to_image" /> 
    </div> 
</div> 

CSS

#block { 
    width: 348px; 
    display: table;   /* set the main wrapper to display as a table */ 
} 
#content { 
    width: 164px; 
    padding: 20px; 
} 
#image { 
    width: 144px; 
    display: table-cell; /* set the inner wrapper to display as a cell */ 
    vertical-align: middle; /* tell to vertically align the contents */ 
} 

는 기술과 충돌 사용중인 일부 CSS position 선언을 제거 할 필요가 있었다. 그러나 CSS없이 정확히 같은 레이아웃을 구현할 수 있으므로 CSS vertical-align:middle이 예상대로 작동 할 수 있습니다.

당신의 존재 CSS 선언 중 하나를 제거하고 정확히 같은 목표 달성이없는 마크 업에

JQuery와 솔루션 :

working Fiddle 예를 참조를!

enter image description here

jQuery를

#image 내부 img에 도착하고, 그 높이를 수집하여 두 나누어 얻어진 값과 음으로 마진을 적용한다.

$(function() { 
    var $target = $('#image').find('img'); 

    $target.css({ 
    "margin-top" : "-" + ($target.height()/2) + "px" // adjust the top margin 
    }); 
}); 

CSS

#block { 
    width: 348px; 
    position: relative; 
} 
#content { 
    width: 164px; 
    padding: 20px; 
    margin-right: 144px; 
} 
#image { 
    width: 144px; 
    position: absolute; 
    right: 0; 
    top: 0;    /* fit to the top */ 
    bottom: 0;   /* fit to the bottom */ 
    /*overflow:hidden;*/ /* optional if the img is bigger that this container */ 
} 
#image img { 
    position: absolute; /* remove element from the document flow */ 
    top: 50%;   /* move it down by 50% of its parent height */ 
} 

HTML

<div id="block"> 
    <div id="image"> 
     <img src="path_to_image" /> 
    </div> 
    <div id="content">Some content goes here.</div> 
</div> 

현재 마크 업을 보존하고 몇 가지 추가 CSS가 작동하도록 추가되었습니다. jQuery 부분은 가능한 한 간단하게 두십시오!

+0

물론 IE6이나 IE7에서는 작동하지 않습니다. IE7은 여전히 ​​상당히 유익합니다. –

+0

흠, 그게 내가하는 일을 성취하지는 못합니다. 이미지가 컨테이너의 다른 내용보다 크면 어떻게 될까요? 기본적으로 상단과 하단 모두에 오버플로가 발생합니다. 그리고 블록 안에 패딩이 있습니다. 그래서 그것이 절대적으로 위치합니다. – Chad

+0

나는 패딩을 지나치고 오른쪽 위의 가장자리에 이미지가 나타나기를 바랐다. 그리고 IE7은 필수품입니다. – Chad

1

절대적으로 이미지를 컨테이너 내부에 배치 할 수 있습니다. 그렇지 않은 경우에는 javascript를 사용하여 컨테이너 높이와 이미지 높이를 얻고 이미지를 그런 식으로 배치해야합니다. .

는 CSS를 통해 그것을 설정하려면 : 컨테이너의 요소 :

는 "상대적 위치"의 스타일을 설정합니다. 그런 다음 이미지의 스타일을 "position : absolute; top : 50 %;"로 설정하십시오. 컨테이너에 높이를 추가해야 할 수도 있습니다.

+0

아버스를 50 % 위에 설정하면 이미지 중심을 블록의 중심으로 만들기보다 아답터를 50 % 아래로 밀어 넣을 수 있습니다. Javascript는 대안이지만, 오히려 사용하지 않을 것입니다. 상단에서 50 %의 abs pos에서 이미지를 가져 오려면 이미지 높이의 절반에 대해 마이너스 마진을 설정해야합니다. 이는 JS와 결합됩니다. CSS 옵션이 있는지 궁금합니다. – Chad

+0

이미지의 높이나 컨테이너의 높이를 모르는 경우 자바 스크립트를 통해 동적으로 CSS를 설정하는 것 이외에 다른 방법을 찾지 못합니다. – Justine

+0

나는 JS를 선택권으로 확실히 지킬 것이다. 감사. – Chad