개발(Web)/Web

[CSS] display: none;과 visibility: hidden;과 opacity: 0;

shinyelee 2022. 1. 25. 18:43

visibility: hidden; VS display: none; VS opacity: 0;

display: none;

해당 콘텐츠를 아예 치워버리기 때문에 콘텐츠가 차지하던 공간도 함께 없어진다.

화면폭이 줄어들면 메뉴의 텍스트가 사라지게 만들어 보자.
display: none;을 적용하면
텍스트는 물론 텍스트가 차지하던 공간도 함께 사라진다.


visibility: hidden;

해당 콘텐츠가 눈에 보이지 않을 뿐, 콘텐츠가 차지하던 공간은 그대로 남겨둔다.

상단의 초록색 박스가 눈에 안 보이도록 만들어 보자.
visibility: hidden;을 적용하면
박스가 눈에 보이지 않지만 박스가 차지하던 공간은 그대로 남아 있다.


opacity: 0;

visibility: hidden;처럼 눈에 보이지 않되 공간을 차지한다. 그리고 display: none;이나 visibility: hidden;과는 달리 이벤트가 정상적으로 작동한다.

display: none;과 visibility: hidden;은 input 값을 입력할 수가 없는 반면
opacity: 0;의 경우 해당 공간에 냅다 마우스를 올리거나(잘 보면 마우스 포인터가 텍스트 모드로 바뀜)
normal에 텍스트를 입력 후 tab 키를 이용해 넘어가는 등의 방법으로 input 값을 작성할 수 있다.
submit 후 주소창을 보면 normal과 opacity의 이벤트만 정상적으로 작동하는 것을 확인할 수 있다.


요약

001.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="001.css" />
    <title>display: none; VS visibility: hidden; VS opacity: 0;</title>
  </head>
  <body>
    <form action="#">
      <div class="border">
        <label for="normal">normal</label>
        <br />
        <input type="text" id="normal" name="normal" value="" />
        <li>보이는가? O</li>
        <li>이벤트 작동 O</li>
        <li>공간 차지 O</li>
      </div>
      <div class="border">
        <label for="display">display: none;</label>
        <br />
        <input type="text" id="display" name="display" value="" />
        <li>보이는가? X</li>
        <li>이벤트 작동 X</li>
        <li>공간 차지 X</li>
      </div>
      <div class="border">
        <label for="visibility">visibility: hidden;</label>
        <br />
        <input type="text" id="visibility" name="visibility" value="" />
        <li>보이는가? X</li>
        <li>이벤트 작동 X</li>
        <li>공간 차지 O</li>
      </div>
      <div class="border">
        <label for="opacity">opacity: 0;</label>
        <br />
        <input type="text" id="opacity" name="opacity" value="" />
        <li>보이는가? X</li>
        <li>이벤트 작동 O</li>
        <li>공간 차지 O</li>
      </div>

      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

001.css

form {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  grid-template-rows: repeat(5, 150px);
}

.border {
  border: 1px solid blue;
  padding: 10px;
}

#display {
  display: none;
}

#visibility {
  visibility: hidden;
}

#opacity {
  opacity: 0;
}

참고

 

visibility:hidden vs display:none vs opacity:0

I'm currently starting on an animation project. In the project I'll have more than 40000 divs and animate them iteratively. If any of divs are in passive state (i.e. it's not animating at least for 2

stackoverflow.com

반응형

'개발(Web) > Web' 카테고리의 다른 글

[CSS] 100%와 100vw/100vh  (0) 2022.01.27
[CSS] position: fixed;와 position: sticky;  (0) 2022.01.26
[CSS] normalize.css  (0) 2022.01.24
[CSS] reset.css  (0) 2022.01.23
[CSS] Grid 자동정렬  (0) 2022.01.22