일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스 완전탐색
- 장고
- codesandbox
- 코딩테스트 고득점 Kit
- websocket
- react
- 코딩테스트 고득점 Kit 완전탐색
- 프로그래머스
- react hook
- 데이터모델링과마이닝
- 코틀린
- 프로그래머스 자바
- 디자인 패턴
- 리액트
- 프로그래밍 언어론
- react firebase
- 자바스크립트
- 리액트 훅
- NextJS
- 자바 공부
- React JS
- useState
- Java
- 컴퓨터 네트워크
- JavaScript
- 자바
- 백준
- useEffect
- design pattern
- vanillaJS
- Today
- Total
기록하는 개발자
[CSS] Display : none, opacity : 0, visibility : hidden 비교 본문
브라우저의 렌더링 과정
https://mingmeng030.tistory.com/316
Parsing(DOM Tree, CSSOM Tree 구성) → Style(Render Tree 구성)
→ Layout(Render Tree 배치 : Reflow) → Paint(Render Tree 그리기 : Repaint) → Composite
Display : none opacity : 0 visibility : hidden
위 세 가지 모두 화면에서 element를 보이지 않게 한다. 그렇다면 차이점은 무엇일까?
Display : none
Dom Tree에는 포함되지만 Render Tree에서 제외되어 Layout(Reflow)에 포함되지 않아 화면에서 자리를 차지하지 않는다.
그러나 Dom Tree까지는 해당 요소가 Node로 만들어 지기 때문에, Parsing 과정은 거쳐야 한다. 즉, 리렌더링에 따른 자원 소모는 피하지 못한다.
- 검색엔진이 접근하지 못한다.
- Reflow, Repaint를 하지 않는다.
visibility : hidden
Render 트리에 포함되어 Layout에 포함된다. 따라서 화면 상 자리를 차지하지만 눈에 보이지 않는다.
- javascript의 onClick 이벤트에 반응하지 않는다.
- Repaint 만 함
opacity : 0
Layout에는 포함되지만 눈에 보이지 않는다는 점에서 visibility : hidden과 동일하게 작동한다.
그러나 visibility : hidden과 달리 click event에 반응한다.
- javascript의 onClick 이벤트에 반응한다.
- Repaint 만 함
코드 보기 ↓
<div class="container">
<div class="background">
<div class="opacity">Opacity</div>
<div class="display">Display</div>
<div class="visibility">Visibility</div>
</div><br/>
<div class="background">
<div class="opacity">Opacity</div>
<div class="click-display">Display</div>
<div class="visibility">Visibility</div>
</div><br/>
<div class="background">
<div class="display">Display</div>
<div class="click-opacity">Opacity</div>
<div class="visibility">Visibility</div>
</div><br/>
<div class="background">
<div class="display">Display</div>
<div class="click-visibility">Visibility</div>
<div class="opacity">Opacity</div>
</div><br/>
</div>
.container {
background-color: #f1f1f1;
width: 100%;
}
div {
display: inline-block;
font-family: sans-serif;
font-size: 20px;
text-align: center;
}
.background{
width : 500px;
padding : 10px 0;
border : 1px solid lightgray;
margin : 10px 0;
}
.display, .opacity,.visibility {
width: 100px;
padding : 20px 0;
text-align : center;
}
.display {
background-color: #dd3;
}
.opacity {
background-color: #259;
}
.visibility {
background-color: #f12;
}
.click-display {
display: none;
}
.click-opacity {
opacity: 0;
}
.click-visibility {
visibility: hidden;
}
참고
https://mycodings.fly.dev/blog/2022-12-18-css-display-none-vs-visibility-hidden
'Web' 카테고리의 다른 글
CSS 방법론 - BEM, OOCSS, SMACSS (0) | 2024.03.03 |
---|---|
브라우저의 렌더링 과정과 Reflow, Repaint (0) | 2023.12.19 |
쿠키(cookie), 세션(session), 캐시(cache), 웹 저장소(localstorage, sessionstorage) (0) | 2023.12.11 |
scss에서의 media query 적용하기 (0) | 2023.04.07 |
[SCSS] SCSS의 rgba에 Opacity(투명도)적용하기 (0) | 2022.10.17 |