가시성이 작동하지 않는 CSS 전환


102

아래 바이올린에서 가시성과 불투명도를 개별적으로 전환했습니다. 후자는 작동하지만 전자는 작동하지 않습니다. 또한 가시성의 경우 전환 시간은 마우스 오버시 지연으로 해석됩니다. Chrome과 Firefox 모두에서 발생합니다. 이것은 버그입니까?

http://jsfiddle.net/0r218mdo/3/

사례 1 :

#inner{
    visibility:hidden;
    transition:visibility 1000ms;
}
#outer:hover #inner{
    visibility:visible;
}

사례 2 :

#inner1{
    opacity:0;
    transition:opacity 1000ms;
}
#outer1:hover #inner1{
    opacity:1;
}

4
(가) 때문에 후자의 작품 opacity사이에 여러 값을 취할 수 0하고 1있는 동안, visibility단지 수 있습니다 visible또는 hidden(NO 중간 값)
파브리 지오 Calderan

답변:


148

이것은 버그가 아닙니다. 서수 / 계산 가능한 속성에서만 전환 할 수 있습니다 (몇 가지 예외가 있지만 숫자 시작 및 끝 숫자 값이있는 속성을 쉽게 생각할 수 있습니다).

전환은 두 사이의 키 프레임을 계산 하고 중간 양을 외삽하여 애니메이션을 생성하는 방식으로 작동하기 때문 입니다.

visibility 이 경우 이진 설정 (표시 / 숨김)이므로 전환 기간이 경과하면 속성이 상태를 전환하기 만하면 지연으로 표시되지만 실제로 전환 애니메이션의 최종 키 프레임으로 볼 수 있습니다. 계산되지 않은 중간 키 프레임 (숨김 / 표시 사이의 값은 무엇입니까? 불투명도? 치수? 명시 적이 지 않으므로 계산되지 않음).

opacity 값 설정 (0-1)이므로 제공된 기간 동안 키 프레임을 계산할 수 있습니다.

전환 가능 (애니메이션 가능) 속성 목록은 여기 에서 찾을 수 있습니다.


7
dev.w3.org/csswg/css-transitions/#animtype-visibility 는 중간 값이 "표시"로 매핑되도록 지정합니다.
Beni Cherniavsky-Paskin

@ BeniCherniavsky-Paskin-이것은 타이밍 기능에 따라 달라집니다 :other values of the timing function (which occur only at the start/end of the transition or as a result of cubic-bezier() functions with Y values outside of [0, 1]) map to the closer endpoint
SW4

1
SW4의 응답은 오해의 소지가 있으며 가시성의 목적에 대한 오해를 설명하지 않습니다.
JesseMonroy650

@ JesseMonroy650-반박하기는 주저하지만, 그 주장에 대한 추가 증거가 제공되지 않으면 더 쉽게 할 수 있지만 자세히 설명 할 수 있다면 매혹적일까요? OP는 가시성의 목적 (디스플레이, 불투명도와 다름)을 묻지 않았지만 속성으로 애니메이션 할 수없는 이유, 즉 주어진 이유로 인해 사실상 켜기 / 끄기 설정입니다. 대답은 '가시성이 무엇인지'가 아니라 '왜 애니메이션으로 만들 수
SW4

OP의 의미에 대해 의문을 제기 할 수는 있지만 반박하겠습니다. 끊임없는 (불완전한) 테마와이 작업을 수행 할 수없는 것에 짜증이 나서 조사하기로 결정했습니다. 먼저 문서가 형편 없다는 점에 주목할 가치가 있습니다 . 설명이 나쁘고 사양이 잘못 작성되었습니다 (편집자도 메모가 있음). 로 문서화되어 있지만 animatable실제로 속성이 거의 없습니다. 그 속성 중 하나는 타이밍 입니다. 곧 블로그를하겠습니다.
JesseMonroy650

67

가시성은 애니메이션 가능합니다. 이에 대한이 블로그 게시물을 확인하십시오. http://www.greywyvern.com/?post=337

여기에서도 볼 수 있습니다 : https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties

마우스를 가져갈 때 페이드 인 및 페이드 아웃하려는 메뉴가 있다고 가정 해 보겠습니다. opacity:0만 사용하는 경우 투명 메뉴는 그대로 유지되며 보이지 않는 영역을 가리키면 애니메이션이 적용됩니다. 그러나을 추가 visibility:hidden하면이 문제를 해결할 수 있습니다.

div {
    width:100px;
    height:20px;
}
.menu {
    visibility:hidden;
    opacity:0;
    transition:visibility 0.3s linear,opacity 0.3s linear;
    
    background:#eee;
    width:100px;
    margin:0;
    padding:5px;
    list-style:none;
}
div:hover > .menu {
    visibility:visible;
    opacity:1;
}
<div>
  <a href="#">Open Menu</a>
  <ul class="menu">
    <li><a href="#">Item</a></li>
    <li><a href="#">Item</a></li>
    <li><a href="#">Item</a></li>
  </ul>
</div>


2
이것은 사실이 아닙니다. 기사는 다음을 명확하게 보여줍니다. 1 : 사용자가 요소 위에 마우스를 올려 놓음 2 : 가시성이 가시성으로 전환됨 3 : 불투명도 전환 애니메이션 시작
Ben Racicot 2015 년

5
그러나이 기사는 불투명도로 능숙하게 전환하여 애니메이션 가시성과 동등한 기능을 제공합니다. 드롭 다운 메뉴와 같이 숨겨진 개체 "아래"항목을 클릭 할 수 있도록 가시성을 조정해야하는 이유를 잘 설명합니다. 그러나이 답변은 로컬 에서 예제와 요약을 제공하면 더 좋을 것 입니다. (링크 휴식, 난 그냥 하나의 고정.)
밥 스타

이 답변은 약간 오해의 소지가 있지만 그럼에도 불구하고 감사합니다!
JaTo

2
@ BobStein-VisiBone 나는 내 대답을 편집하고 예를 들었습니다. 당신의 도움 :) 주셔서 감사합니다
Sevban Öztürk

20

가시성은 사양에 따라 애니메이션 가능한 속성이지만 가시성 전환은 예상대로 점진적으로 작동하지 않습니다. 대신 가시성 지연으로 전환하여 요소를 숨 깁니다. 반면에 요소를 표시하는 것은 즉시 작동합니다. 이것은 사양에 정의 된대로입니다. (기본 타이밍 기능의 경우)에 되어 있고 브라우저에서 구현 된 것과 같습니다.

실제로 요소를 숨기는 다양한 시각 효과를 상상할 수 있기 때문에 이것은 또한 유용한 동작입니다. 요소 페이드 아웃은 불투명도를 사용하여 지정된 시각적 효과의 한 종류 일뿐입니다. 다른 시각 효과는 예를 들어 transform 속성을 사용하여 요소를 멀리 이동할 수 있습니다. http://taccgl.org/blog/css-transition-visibility.html

불투명 전환과 가시성 전환을 결합하는 것이 종종 유용합니다! 불투명도가 제대로 작동하는 것처럼 보이지만 완전히 투명한 요소 (불투명도 : 0 포함)는 여전히 마우스 이벤트를 수신합니다. 예를 들어 불투명 전환만으로 페이드 아웃 된 요소의 링크는 여전히 클릭에 응답하고 (표시되지는 않음) 페이드 된 요소 뒤의 링크는 작동하지 않습니다 (페이드 된 요소를 통해 표시됨). http://taccgl.org/blog/css-transition-opacity-for-fade-effects.html 참조 .

이 이상한 동작은 전환, 가시성 전환 및 불투명 전환을 모두 사용하여 피할 수 있습니다. 따라서 가시성 속성은 요소에 대한 마우스 이벤트를 비활성화하는 데 사용되며 불투명도는 시각 효과에 사용됩니다. 그러나 시각적 효과가 재생되는 동안 요소를 숨기지 않도록주의해야합니다. 그렇지 않으면 보이지 않습니다. 여기서 가시성 전환의 특수한 의미가 편리해집니다. 요소를 숨길 때 요소는 시각 효과를 재생하는 동안 계속 표시되고 나중에 숨겨집니다. 반면에 요소를 표시 할 때 가시성 전환은 시각적 효과를 재생하기 전에 요소를 즉시 표시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.