2014-12-28 4 views
0

기본적으로 상대 컨테이너에는 3 개의 절대 위치 요소가 있습니다. 그 중 하나는 left: 100% (다음에 오는 것)이고 하나는 left: -100% (이전 그림)입니다. transition 속성을 사용하여 사용 가능한 장소 사이를 자동으로 전환합니다. 이것의 최종 결과는 here입니다.절대 위치 지정된 자식에서 너비를 정의하면 비정상적인 동작이 발생하지 않는 이유는 무엇입니까?

<div id="slideshow"> 
    <article> 
     <img> 
    </article><article> 
     <img> 
    </article><article> 
     <img> 
    </article> 
</div> 
<style> 
    div#slideshow { position: relative; overflow: hidden } 
    img    { width: 100%; height: auto } 
    article   { width: 100%; position: absolute; transition: left 1s } 
    article.current { left: 0 } 
    article.prev { left: -100% } 
    article.next { left: 100% } 
</style> 

(This 슬라이드 쇼가 어떻게 작동하는지 볼 수있는 적용 overflow: hidden없는 결과입니다.)

당신이 볼 수 있듯이, <img>의 자신의 부모, <article>에 반응한다. 블록 요소가 항상 사용 가능한 너비를 차지한다는 것을 알고 있으므로 상태를 지정해야한다고 생각하지는 않지만 보시다시피 <article>width: 100%을 지정해야했습니다. 내가하지 않으면 어떻게 될까? Something interesting, I'd say.

.prev<img>은 다른 크기보다 두 배 커지고 .next<img>은 0x0 크기로 렌더링됩니다. 뭐? 모든 이미지의 너비가 100 %이고 높이가 같아야합니다.

내가 알고 싶었던 것은; CSS가 왜 그렇게 작동합니까? 이 결과가 예상치 못한 결과를 낳았 기 때문에 실제로 결과가 반환되는 이유에 대한 토론이 필요했기 때문에 CSS 값의 기본 구성 요소가 실제로 어떻게 작동하는지 더 잘 이해할 수있었습니다.

답변

1

문제는 이미지 자체가 아니라 기사에 있습니다.

크기를 결정하는 것은 기사 요소이며 이미지는 크기를 가져옵니다.

기사의 너비가 설정되지 않았습니다. 그게 없으며 왼쪽에 문이 있으면 의 값이 0px로 가정됩니다. 왼쪽을 0으로하면 왼쪽은 -100 %, 오른쪽은 100 %, 왼쪽은 100 %, 너비는 0입니다.

어떻게 해결할 수 있습니까? ?

  1. 너비 : 기사에 100 %를 추가하십시오. - 직접적인 해결책.
  2. left 속성을 사용하여 기사를 이동하는 대신 변형을 사용하십시오. translateX (-100 %); 왼쪽으로 바뀌면 문제가 발생하지 않으며 더 효과적입니다.
+0

답장을 보내 주셔서 감사합니다. 나는 이제'left' /'right' /'top' /'bottom' 속성에 대해 더 많이 이해합니다. 처음에'left' 이외에'right' 속성을 추가하려고 시도했지만 작동하지 않았습니다. 왜 그런지 알고 있습니까? CSS3 변환을 사용하는 것은 훌륭한 제안이며, 이전에 생각하지 못했던 것입니다. 고맙습니다! – mnsth

+0

또한 올바른 값은 '0px'가 아니라 '700px'라고 가정합니다. 적어도 데모에서 일어나는 일입니다. – mnsth

+0

아니요, 오른쪽에 0px는 괜찮습니다. 즉 오른쪽에서 컨테이너 오른쪽 0px에 있음을 의미합니다. – vals