2012-05-29 3 views
0

나는 이상한 행동을 취하려고 노력하고 있습니다. jquery로 표시된 div가 잘립니다.

는이 같은 대한 일반적인 구조와 길고 복잡한 HTML 페이지가 다음 "주요 내용"모든 액션이 일어나고에서

+------------------------------------------+ 
| Page header        | 
+-----------------------------+------------+ 
|        | Right  | 
| Main content    | Column | 
|        |   | 
+-----------------------------+------------+ 

합니다. 사용자의 버튼 클릭 중 하나가 발생할 수 있습니다. 처음에는 보이지 않는 위치의 div가 표시되고 해당 내용이 AJAX를 사용하여 채워집니다 (즉, 얼마나 많은 콘텐츠가 미리 있는지 모릅니다) .

이 div의 전체 height이 "주 콘텐츠"의 사용 가능한 높이보다 작아지면 정상적으로 작동합니다. 그러나이 "팝업"div가 많은 콘텐츠로 인해 길어지면 "Main content"div의 맨 아래에서 잘립니다. 아래에는 아무것도 없으므로 팝업의 모든 내용을보기 위해 아래로 스크롤 할 수도 없습니다. 팝업의 전체 높이와 스크롤 할 수있는 페이지를 팝업의 맨 아래까지 줄이기 위해 "주 콘텐츠"를 늘려야 할 것입니다. 그러나 이것은 일어나지 않습니다.

.content { 
    width: 770px; 
    position: relative; 
    overflow-x: visible; 
    overflow-y: hidden; 
} 

그리고 여기에 팝업에 대한 CSS입니다 : 여기

내 "주요 내용"에 대한 CSS입니다

#popupedit { 
    background-color: #f1f0ec; 
    width: 770px; 
    z-index: 100001; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
    display: none; 
} 

가 HTML에서 popupeditcontent의 직접적인 자식입니다. 체인에 높이 또는 최대 높이 제한이 없습니다. 그렇다면 왜 "컨텐츠"가 "팝업"을 수용하기 위해 증가하지 않는 것입니까?

+1

것은'제작 오버 플로우 - y를보십시오 :'에 표시 '.content' – Timm

+0

이것은 가능한 일일 수 있습니다. 불행히도, 다른 이유로, 나는 "overflow-y : hidden"을 제거 할 수 없습니다. 그러나, 내가 아는 한, 부모의 높이를 명시 적으로 제어하고있는 경우에만 효과가 있습니다. 필자의 경우 높이는 항상 "자동" –

+0

절대 위치 요소는 부모의 자연스러운 높이 또는 너비에 추가되지 않습니다. 그래서 당신의 div를 포함하는 것이 크기에 맞지 않습니다. 이러한 종류의 것들에 대한 몇 가지 해킹이 있지만, 팝업을 외부로 이동하는 것이 좋습니다. 본체 요소에 직접 추가하는 것이 좋습니다. 이렇게하면 솔루션을 OLD-IE에보다 안전하게 사용할 수 있습니다. –

답변

0

절대 위치 지정을 제거하고 다른 기술 (예 : 수레)을 사용하여 팝업을 배치하여이 문제를 해결할 수 있습니다. 맞춰 볼까요, position: absolute도 필요합니까? :) 그렇다면 여전히 희망이 있습니다. 컨텐츠가로드 된 후 JavaScript로 컨텐츠 div의 크기를 조정할 수 있습니다. 물론

$(".content").css("min-height", $("#popupedit").height()+"px"); 

이 팝업가 완전히로드 된 후 실행해야하고, 팝업이 종료하면 당신은 아마 크기 조정을 취소해야합니다

$(".content").css("min-height", ""); 
+0

예, 이것이 제가 생각한 것입니다. 물론 AJAX를 통해 얻을 수있는 콘텐츠에는 이미지의 URL이 포함되어 있기 때문에 좀 더 복잡합니다. 모든 이미지가로드 될 때까지 팝업의 실제 높이를 알 수 없습니다. :) –

+0

그런 다음 위의 코드를 방금 삽입 한 컨텐트에서 실행 한 후 팝업의 모든 이미지의'load' 이벤트에 바인드하십시오 :'$ ("# popupedit img") .load (updateFunction);'. 크기 조정 코드는 빠르며 멱등수입니다. 필요한만큼 여러 번 실행할 수 있습니다 (그러나 팝업이 닫힌 후에는 실행되지 않도록 검사를 추가해야 할 수도 있음). – Brilliand

+0

아하! 그 부분은 제가 누락 된 부분이었습니다 : 이미지의 '로드'를 묶는 것. 이제 작동합니다. –

2

.content div 내에 팝업을 만드는 것처럼 보입니다.

overflow-y : hidden이 있는데 오버플로가 숨겨집니다.

콘텐츠 div에서 팝업을 이동해보십시오.

+0

바깥으로 이동할 수 없습니다. "overflow-y : hidden"에 관해서는, 부모님이 "height"또는 "max-height"를 명시 적으로 설정할 때만 적용된다는 것을 이해합니다. 그렇지 않으면, 부모의 키가 어린이에 맞게 조정되어 있어야합니다. –

+0

왜 움직일 수 없습니까? 필요한 경우 팝업을 어떻게 보이게합니까? – Alex

+0

나는 "주요 내용"바깥에있는 것을 제어 할 수 없다. 레이아웃 엔진이 설계된 방식에 따라 헤더가 먼저 출력되고 그 다음 오른쪽 열이 출력됩니다. 그런 다음 주요 내용이 삽입됩니다. 마지막으로 전역 바닥 글이 뒤 따릅니다. 엔진은 모든 레이아웃을 처리하고 필요한 경우 내 페이지 (부모로부터 열리고 닫힌 div에 들어가는 내용)를 삽입하기 만하면됩니다. –

0

overflow-y를 제거하십시오 : 숨김; 작동해야합니다. 또한 나는 popupedit 고정 높이를

편집을 제공하는 것이 좋습니다 것입니다 :

var hh = document.getElementById('popupedit').offsetHeight; 
document.getElementById('fix').style.height = hh + "px"; 

CSS :

.content { 
    width: 770px; 
    position: relative; 
    overflow-x: visible; 
    overflow-y: hidden; 
    height: auto 
} 
#popupedit { 
    background-color: #f1f0ec; 
    width: 770px; 
    z-index: 100001; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
} 

#fix { width: 770px; } 

HTML :

<div class = "content"> 
    <div id = "popupedit"> 
     <p>Something important</p>     
    </div> 
    <div id = "fix"></div> 
</div> 
+0

여러 가지 이유로 "overflow-y : hidden"을 제거 할 수 없습니다. 내 이해는 "overflow-y : hidden"은 높이 또는 최대 높이가 부모에 설정된 경우에만 적용됩니다. 그렇지 않으면 부모는 자녀를 수용 할 수 있도록 성장해야합니다. 콘텐츠의 높이가 100에서 1000 픽셀 사이가 될 수 있고 팝업에는 콘텐츠가있는 위치에서만 볼 수있는 자체 배경이 있으므로 팝업에 고정 된 높이는 분명히 문제가되지 않습니다. –

+0

나는 나의 대답을 편집했다. 아마 이것은 당신을 위해 일할 것이다. – madeye

-1

한번에 확인이

JS 해킹 시도 0 제거of .content. 이것은 어쨌든 필요하지 않습니다 (당신이 말하지 않은 것에 그것을 필요로하지 않는다면). 이것은 큰 오해입니다. 많은 사람들이 거의 모든 요소에 position: relative;을 사용합니다. 그건 전혀 필요하지 않습니다.

#popupedit이 이제는 부모가 아닌 절대적으로 자신을 위치시키기 때문에 문제가 발생할 수 있습니다. 내가 제안하는 것은 position: relative;을 삭제하고 팝업을 정적 인 width에주고 가로 위치를 jQuery로 중심에 놓습니다.또한 top: 0;

left: 0; 없애 그럼 당신은 별도의 파일에 (큰 문제가 아닙니다) 당신이 터지는 - 그것 - 업을위한 전화 코드에이 코드 조각을 추가하거나 :

$("#popupedit ").css({ 
    left: ($(window).width() - $('.className').outerWidth())/2, 
    top: ($(window).height() - $('.className').outerHeight())/2 
});​ 
+0

내 질문에 완전히 오해 한 것 같습니다. 이것은 정확히 부모 위치에 "위치 : 상대"가있는 이유입니다. 왜냐하면 절대적으로 위치한 div가 부모가 아닌 창의 위치에 절대적으로 위치해야하기 때문입니다. 팝업 크기를 조정하고 싶지는 않습니다. 꼭 필요한 팝업 크기가 필요하고 부모가 높이를 조정하여 일치시킬 수 있어야합니다. –

+0

글쎄, 그럼 당신은 꽤 '팝업'의 요점을 놓치고있다. 어쨌든, 테스트 케이스를 제공하십시오. –