IR 기법과 Sprite 기법에 대해서 공부를 해오라는 숙제가 주어졌다.
IR 기법은 이전에 정리를 하면서 공부한 적이 있었는데 Sprite 기법은 이번 기회를 통해 정리를 할 수 있게 되었다.
sprite 기법이라고 처음 들었을 땐, 스프라이트..? 내가 아는 스프라이트는
이 스프라이트 밖에 없는데.. (갈 길이 멀다멀어)
그렇다면 sprite 기법을 왜 사용할까? 크게는 두 가지 이유가 있는데
간단하게 설명해서 이미지 4개를 렌더링 시키는데 1개당 1초의 시간이 걸린다고 가정하면 총 4초의 시간이 걸리겠지만 4개의 이미지를 1개의 이미지로 만들고 1개의 이미지만 렌더링 시킨다면 1초의 시간밖에 걸리지 않기 때문이다.
첫 번째 이유와 비슷하게 4개의 이미지의 용량이 각각 4KB라고 한다면 하나의 이미지로 9KB만 차지할 수 있기 때문이다.
➡️ 브라우저는 화면에 구현하는 모든 자원을 서버에 요청하고 불러와서 구현한다. 그 자원을 구현하는데 시간이 소요되는데 소스가 많으면 많을수록 구현 속도가 느려진다.
예시와 함께 sprite 기법을 사용하는 방법에 대해서 알아보자
<!DOCTYPE html>
<html lang="ko-KR">
<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" />
<title>Document</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<button>next</button>
<button>pre</button>
<button>up</button>
<button>down</button>
</body>
</html>
➡️ 버튼 4개가 보이는 것을 확인할 수 있다.
button {
width: 50px;
height: 50px;
border: none;
background-image: url("./img/image_sprite.png");
background-repeat: no-repeat;
}
button 크기만큼 이미지가 삽입되어있다. 버튼에 태그에 입력했던 텍스트는 스크린리더를 위한 텍스트이니 화면에는 보이지않게 만들어야 하는데 어떻게 숨길 수 있을까?🤔
텍스트를 숨기는 방법 은 아래에 정리해두었다.
button:first-child {
background-position: 0, 0;
}
button:nth-child(2) {
background-position: -50px 0;
}
button:nth-child(3) {
background-position: -100px 0;
}
button:nth-child(4) {
background-position: -150px 0;
}
이게 바로 sprite 기법!
언제 써봤을까 고민해봤는데 쿠팡 과제할 때 썼었는데 용어도 모르고 썼던 것 같다. 이번 기회에 정리하면서 내가 어떤 방법으로 해당 이미지를 구현했고, 왜 이런 방식으로 구현하는지에 대해서 구체적으로 알게 되었다.
텍스트를 숨기는 방법 3가지를 정리해보자
글씨 들여쓰기의 길이를 설정하는 CSS 속성
button {
text-indent: -9999em;
}
→ 해당 속성을 통해 화면에 보이지 않도록 처리할 수 있다. 하지만 해당 속성으로 텍스트를 숨기게 될 경우 텍스트가 멀리있는 만큼 렌더링 속도가 느려질 수 있다.
button {
width: 50px;
height: 50px;
position: relative;
border: none;
}
button::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url("./img/image_sprite.png");
background-repeat: no-repeat;
}
.button-wrapper {
overflow: hidden;
height: 50px;
}
button {
width: 50px;
height: 0;
padding: 50px 0 0 0;
border: none;
background-image: url("./img/image_sprite.png");
background-repeat: no-repeat;
}