2012-04-10 1 views
2

나는 css를 이해하려고 노력하고 있으므로 아래 실험 코드를 가능한 한 일반적인 것으로 만들기 위해 최선을 다했다.절대 요소 다음에 상대 요소를 배치하고 부모 div를 자식에 맞게 확장하는 방법은 무엇입니까?

두 개의 상자가있는 간단한 페이지가 있습니다. Why does setting the `right` CSS attribute push an element to the left?에 따라 특정 위치에 배치해야하는 상자 중 하나가 필요했습니다. position:absolute 그러나 이제는 일부 div를 추가하려고합니다. 내 절대 div 아래에, 게다가 나는 자식 div의 크기에 맞게 확장하려면 부모 div 싶습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
     <style type="text/css"> 
      #outer { 
       position : relative; 
       background-color : green; 
       width : 500px; 
       height : 500px; 
/*     overflow : hidden; */ 
/* I know from working with floating elements inside divs that this works 
* to cause parent divs to exand out around floating children, but this 
* does not do the same thing here, it lops off the bottom of the child divs 
* if I un-comment the preceding line! 
*/ 
      } 

      #inner { 
       position : absolute; 
       background-color : blue; 
       height : 400px; 
       width : 400px; 
       top : 10px; 
       right : 20px; 
      } 


      #top_object { 
       position : absolute; 
       top : 450px; 
      } 

      .object { 
       position : relative; 
       width : 450px; 
       height : 200px; 
       background-color : yellow; 
       margin-bottom : 25px; 
      } 
/* The followsing was suggested by: 
     https://stackoverflow.com/questions/1709442/make-divs-height-expand-with-its-content 
     But has no effect! 
*/ 
      .clear { 
       clear : both; 
      } 
     </style> 
    </head> 
    <body> 
     <div id="outer"> 
      <div id="inner"> 


      </div> 
      <div id="top_object" class="object"> 
       Top Object 
      </div> 
      <div class="object"> 
       Second Object 
      </div> 
      <div class="clear"></div> 
     </div> 
    </body> 
</html> 
내가 클래스 객체와이 나타나는처럼 정상에서 절대 거리에 위치 아이디 top_object 내 첫 사업부를 가지고 싶습니다

. 그러나, 나는 더 많은 객체 div가 top 객체 아래로 흐르기를 원할 것이다. 즉, top_object를 사용하여 클래스 객체와 함께 div의 첫 번째 인스턴스에 대한 절대 위치를 정의한 다음 클래스 객체와 함께 divs를 자연스럽게 페이지 아래쪽으로 이동하고 의에 설정된 25 픽셀의 여백과 함께 top_object 각 개체의 top:XXXpx; 특성을 별도로 설정할 필요가 없습니다.

내 첫 번째 질문은 내 두 번째 개체가 첫 번째 개체 위에 나타나는 이유이며 relative 위치 지정된 개체가 absolute 개체 아래로 흐르게 할 수 있습니까?

둘째로 백그라운드 div를 확장하려면 어떻게해야합니까? div를 플로팅 할 때 div가 사용되지 않으면 어떻게됩니까?

또한 내 질문에 대한 직접적인 대답은 내가 왜 내가 옳은지에 대한 설명을 듣고 싶습니다. 왜 어떤 해결책이 그것을 고쳐 줄지에 대해 이해하고 있습니다. 나는 CSS의 논리를 이해하고 싶다. 문제를 해결하는 특정 코드 스 니펫을보기는 커녕 그렇게 좋을 지 모르지만!

+0

프로그래밍 질문이 아니기 때문에 [http://webmasters.stackexchange.com/](http://webmasters.stackexchange.com/) –

+0

에서 질문하는 것이 좋습니다. 접근. 절대 위치 지정은 생각만큼 거의 필요하지 않습니다. 예를 들어,'# top_object'를 사용하면, 상대적으로, 마진이 450px 이상인 것은 어떨까요? 왜 내면을 절대적으로 배치해야합니까? 예를 들어, 왜 'float : right;'가 될 수는 없지만 상대적으로 위치를 잡았습니까? –

+0

좋아, 나는 그것을 시도했다. 그러나 그것은 450px만큼 모두를 움직였다. float : 상대 위치 지정으로 오른쪽으로 이동하지만 450px만큼 아래로 모든 것을 푸시합니다. –

답변

2

position: absolute;은 해당 객체를 문서 플로우에서 완전히 제거합니다. 따라서 정확히 top: 450pxright 또는 left 선택자로 표시 할 위치에 나타납니다. 그 위치 지정은 페이지의 다른 요소에 영향을 미치지 않습니다 (다른 오브젝트를 덮지 않는 한 확실히 z-index없이 발생합니다). 모든 것을 #top_object 아래에 놓으려면 오른쪽 또는 왼쪽으로 띄워서 무엇이든 제공해야합니다. 너가 그것을두기 위하여 필요로하는 한계.

overflow: hidden 또한 정의 된 너비 또는 높이를 벗어나는 내용은 잘라내어 min-width 및 min-height를 정의한 다음 hidden 대신 overflow : auto를 사용해야합니다.

관련 문제