2012-03-14 4 views
1

일부 텍스트가 포함 된 DIV가 있습니다. 하지만 DIV의 높이는 0px에서 시작하며 '오버플로 : 숨김'도 있습니다. 그 후 DIV 높이를 높이기 위해 애니메이션 시스템을 사용하고 있습니다. DIV 안에있는 텍스트의 길이가 다양하기 때문에 DIV에 고정 높이를 부여 할 수는 없습니다.div 내부의 텍스트 높이에 따라 달라집니다.

DIV의 높이가 그 안에있는 모든 콘텐츠를 넣을만큼 충분히 클 때 말할 수있는 방법이 있습니까?

+1

당신이 드 코드를 게시 할 수 당신은 지금까지 있나요? – sanders

+0

오캄의 면도날은 모든 내용을 보여주고 싶다면 왜 오버플로 : 숨김을 가지고 있는지 알고 싶어합니다. 아마 너는 '최고 높이'또는 뭔가를 의미 했을까? –

+0

오버플로 : hidden은 높이가 0으로 설정된 경우 오버플로되는 내용을 숨 깁니다. – Alex

답변

1

어쩌면 당신이 시도 할 수 있습니다 :

다른 DIV와 같은 내부의 텍스트를 넣어 ...

<div> 
    <div>some text</div> 
</div> 

그런 다음 내부의 높이에 따라 (AN 숨겨진 오버플로하는) 외부 DIV 애니메이션 div (숨겨진 오버플로가 없음).

희망이 "자동"는 내용을 채우기 위해 확장 보장한다로 설정하기 때문에 높이를 알 필요가 없습니다를 사용하여/당신이 무슨 일을하는지에 따라

+1

이것은 올바른 생각이지만 원래 div의 내용을 가져올 수는 없습니다. 패딩, 폰트 크기 선언 등이 있으면 어떻게 될까요? OP는 div 클래스, 인라인 스타일 등의 정확한 클론을 만들어야합니다. – maxedison

+0

사실,이 아이디어는 저에게 완벽하게 작용합니다. 나는 jQuery (그러나 Sencha Touch2)를 사용하지 않으므로 불행히도 jQuery 응답을 사용할 수 없다. 내 목록에있는 각 DIV의 높이를 얻을 수있었습니다. – w00

+0

@maxedison : 제 답변은 DOM 구조가 변경되었다고 가정하고 비행 중에는하지 않았습니다! –

0

을하는 데 도움이됩니다.

그러나 자바 스크립트를 사용하여 높이를 알 때까지 높이를 0으로 설정할 수도 있습니다. 예 : jQuery의 경우 :

이제 각 div에는 원래 높이 값을 갖는 "data-height"라는 속성이 있습니다. 그런 다음 필요할 때 div를 확장 할 수 있습니다.

+0

높이를 0으로 설정하지 않으면 사용자 환경이 좋지 않을 것입니다. DOM이 완전히로드 될 때까지 모두 볼 수 있습니다. 그러면 JS가 숨길 것입니다. 또한 사용자가 jQuery (게시물이나 태그에 지정되지 않았습니다.)를 사용하는 경우 높이를 'auto'값으로 애니메이션 할 때 발생할 수있는 애니메이션 버그가 있습니다. 아마도 그것은 OP 질문의 근원입니다. – maxedison

0

div를 애니메이션으로 표시하기 직전에 div를 복제하고 height:0px 제약을 제거하십시오 (예 : 자동 높이 변경). 그런 다음 복제 된 div의 높이를 애니메이션에 사용하십시오.

var myDiv = $('div'); 
var myDivClone = div.clone().insertAfter(myDiv).css('height','auto'); 
var myDivHeight = myDivClone.outerHeight(); 
myDivClone.remove(); 
myDiv.animate({height: myDivHeight}, 250); 

참고 단지 새로운 하나를 만들고 같은 내용으로 작성 반대로 실제로 질문에 요소를 복제의 중요성 :

jQuery를,이 같은 것을 보일 것이다. 당신은 등

ALSO 참고 클래스를 포함, (당신이 나중에 어떻게 높이 수정 제외) 정확히 요소, 바로 myDiv 후 DOM으로 주입의 중요성을 다시해야합니다. 이것은 같은 CSS가 높이 계산시 myDiv에 영향을 미치므로 영향을줍니다. 유일한 예외는 CSS에서 :last-child 선택기를 사용하고 있고 복제본이 상위 요소의 마지막 하위가되는 경우입니다. 그러나 그러한 문제는 쉽게 해결할 수 있어야합니다.

0
if(el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth) 
{ 
    //keep making element bigger 
    el.style.height = parseInt(el.style.height) + 2 + "px" 
} 

이 스 니펫은 일종의 재귀 함수 또는 반복문 안에있을 수 있습니다. 본질적으로 볼 수있는 영역 밖에 스크롤바가 표시 될 내용이 더 있는지 확인하려고합니다.

+0

제 경험상,'scrollHeight'와'offsetHeight'는 브라우저 사이에 상당한 차이가 있습니다. – maxedison

+0

아, 좋은 지적이야. 크롬에서만이 기술을 테스트했습니다. – AlexMA

0

먼저 화면 div를 벗어난 텍스트를 삭제하고 그 크기를 가져 오는 방법은 무엇입니까?

5

나는 끔찍한 해킹을 시도했지만 이것이 충분히 좋은지 확인합니다. 은 기본적으로 당신은, 자동으로 높이를 설정 0으로 재설정하고 마지막으로 다음과 같이 애니메이션 기능을 사용하여 컨텐츠 높이를 얻을 : .sample 변수 텍스트 내용과 사업부에 대한 참조입니다

var tempHeight = $(".sample").css({"height" : "auto"}).height(); 
$(".sample").css({"height" : "0px"}).animate({ 
    height : tempHeight 
},1000); 

. 더 나은 이해를 위해 데모를 확인하십시오.

순수 자바 스크립트 버전 :

document.getElementById("sample").style.height = "auto"; //The id of this div is 'sample' 
var tempheight = document.getElementById("sample").offsetHeight; 
document.getElementById("sample").style.height = "0px"; 
/* 
Custom Animation function, Use tempheight to get the full content 
*/ 

DEMO For The Jquery Version

+0

좋은데, 불행히도이 경우에는 jQuery를 사용할 수 없습니다. (끔찍한 Sencha Touch 라이브러리가 붙어 있습니다.하지만 어쨌든 좋은 예가 +1입니다.) – w00

+0

바하마. 작동하는지 확인하십시오 :) –

+0

예, 실제로 제가 이미 한 일입니다. Mike가 말했듯이, 나는 자동 높이가있는 내부 div를 사용해야했습니다. 당신이 가지고있는 것과 똑같은 DIV의 높이가 있습니다. 그것은 쉬운 부분이었습니다. 하지만 어쨌든 고마워 .-) – w00

관련 문제