Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발 걸음마 중

CSS - 요소 변형하기 (transform) 본문

dev/HTML + CSS

CSS - 요소 변형하기 (transform)

꼿모 2023. 3. 13. 17:30


 

CSS 요소 변형하기 (transform)

 

 * scale 

- 요소의 크기를 조절할 수 있다. 
- 기본적으로 자신의 가운데를 중심으로 크기가 변경된다. 
transform-origin을 통해 기준점을 변경할 수 있다. 
- scale(1.5)는 1.5배만큼 커진다는 의미! 
x축, y축 별도로 크기를 지정할 수 있다.

.transform-scale{
  transform:scale(1.5 1.0);
  transform-origin: 50px 50px;
}

 

 

 

 * rotate 

- 요소를 회전시킬 수 있다. 
- 180eg 각도, 혹은 transform:rotate(0.5turn)과 같은 형태로 사용할 수 있다. 
- 기본적으로 자신의 가운데를 중심으로 회전된다. 
transform-origin을 통해 기준점을 변경할 수 있다. 

.transform-rotate {
	transform: rotate(90deg);
}

 

 

 

 * translate 

- 자신의 위치에서 x, y축으로 이동시킬 수 있다. 
- 기준점은 왼쪽 상단이다. 
음수값도 지정할 수 있다. 

p {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

/* 값을 조절하여 모달창을 만들 수 있다 */

 

 

 

 * skew 

- 요소를 왜곡시키는 속성이다. 
각도 단위를 사용한다. 

.transform-skew{
  transform:skew(30deg, 20deg);
}

 

 

 

 

 

🤔  translate vs position 
웹페이지 렌더링과 관련이 있다. 
- 정적인 사이트에서 요소의 위치를 단순 배치하는 것은 position을 사용해도 된다.

- 애니메이션이나 동적으로 요소의 위치를 이동해야 하는 경우 transform 속성을 사용하는 것이 성능에 좋다.

 

 


 

웹페이지 렌더링 

- 브라우저가 html을 그리는 과정 

 


1. 파싱 

  • html 파일을 DOM으로 변환(파싱)한다.
  • 오타 혹은 잘못된 문법을 사용했을 경우에는 예외처리 한다. 
  • <link>, <img>와 같은 태그를 만나면 리소스를 다운로드합니다.
  • <script> 태그를 만나면 DOM 파싱을 중단하고 자바스크립트를 해석한다. 


2. 스타일 계산 

  • CSS도 파싱 하여 CSSOM으로 변환한다.
  • CSSOM 정보를 통해 DOM 노드에 대한 스타일을 결정한다. 

 


3. 레이아웃 

  •  DOM과 CSSOM 정보를 토대로 레이아웃 트리(렌더 트리)를 생성한다.
  • DOM과 계산된 스타일을 따라가며 요소의 크기나 좌표 같은 정보를 담은 레이아웃 트리를 생성한다. 
  • 화면에 표현되는 정보만 트리에 담기게 된다. (display:none은 담지 않고, 화면에 보이는 가상요소는 트리에 담긴다.)

 

4. 페인트 

  • 레이아웃 트리(렌더트리)가 생성되면 이 트리를 따라 페인트 기록이 생성된다.
  • 페인트 기록에는 요소를 렌더링 하는 순서가 저장된다. 
  • 지금까지의 정보를 바탕으로 한 페이지를 여러 개의 레이어로 나눈 뒤 그 위에 텍스트, 색, 이미지, 보더, 그림자 등 모든 시각적 부분을 그리는 작업이 진행된다. 

 


5. 컴포지팅 

  • 각각의 레이어를 스크린에 픽셀로 표현하고(레스터링) 나누었던 레이어들을 합성하여 페이지를 그린다. 

 

 


 

 

🤔 reflow vs repaint

- 브라우저는 html 구조상의 변화 혹은 스타일의 변화가 있을 때 reflow, repaint라는 과정을 거치게 된다.
- 브라우저의 각 단계별 렌더링 과정들은 반드시 전 단계의 데이터가 필요하다.
※ 만약 전 단계에 변화가 일어나면 다음 단계에 모두 영향을 미친다.

 

 

 

 reflow 

- 레이아웃(너비, 높이) 변경 시 영향받는 모든 노드(자식, 부모)의 수치를 다시 계산하여 렌더 트리를 재성성하는 작업이다.

※ 렌더 트리 : 브라우저가 html을 분석하여 트리형태의 구조로 재해석한 것이다.

 

 

 repaint 

- reflow 과정이 끝난 후 재생성된 렌더 트리를 다시 그리는 작업이다.
- 수치와 상관없는 스타일 변경 시에는 reflow 과정을 생략한 repaint 작업만 수행한다.

 

 

 

 만약 css를 통해 레이아웃이 바뀌는 애니메이션을 구현할 경우 브라우저는 매 프레임마다 reflow, repaint 과정을 수행해야 한다. 때문에 reflow, repaint 현상은 브라우저에 상당한 부담이 된다.

이때 브라우저의 부담을 덜기 위해서 GPU(graphic processing unit)를 이용한 그래픽 가속능력을 사용할 수 있는데 이러한 능력을 지원하는 CSS 속성이 바로 transform이다!

 

 

 


 

 

 

 

 

 

 

 

 

잘못된 정보에 대한 피드백은 언제든지 환영입니다! 

'dev > HTML + CSS' 카테고리의 다른 글

HTML - 표(table)  (0) 2023.03.14
CSS - 애니메이션 (transition, animation)  (0) 2023.03.13
CSS - 속성 선택자 (attribute selector)  (0) 2023.03.13
CSS - 버튼(button)  (0) 2023.03.13
CSS - 변수와 함수  (0) 2023.03.09
Comments