CSS ์ ๋ฆฌ 1 ์ ๋ค ๋ฃ๊ณ ์ถ์๋๋ฐ, CSS๋ HTML๋ณด๋ค ์์ด ๋ง์์ ๊ธ์ ๋๋๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
/* ๋ฅ๋ฅ ๋์์ ์ผ์ชฝ์ผ๋ก ์ ๋ ฌ */ img { float: left; }
๋ฅ๋ฅ ๋์ฐ๋ ๊ฒ. ์ฌ์ง ์์ ์ค๊ธ์ด ๋ค์ด๊ฐ๋ ๊ธฐ์ฌ ํ์์ ๋ง๋ค๊ธฐ ์ํด์ ๋์จ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ธ์๋ค์ float ๋ ๊ฒ์ ์ธ์ํจ!!!
๋ค๋ฅธ ํ๊ทธ๋ค์ด block์ผ๋ก ์ธ์ํ์ง ๋ชปํจ.
inline ์์์ฒ๋ผ ๋์ด๋ ๋์ด๋ฅผ ์ฃผ์ง ์์ผ๋ฉด content ์์ญ์ ๋์ด๋ง ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ค.
border๋ฅผ ์์ฐ์ง ๋ชปํ๋ค๊ฑฐ๋, ๋ค์ ์์์ ๊ฒน์น๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ๋ถ๋ชจ ์์์ overflow ์ถ๊ฐ : ๋ถ๋ชจ๊ฐ overflow ๋ ์์์ ์ธ์ํ๊ฒ ํด์ค๋ค. ์์์ด ๋ชจ๋ float๋ผ์ ๋ถ๋ชจ๊ฐ ๋์ด๋ฅผ ์ธ์ํ์ง ๋ชปํ ๋ ์ฌ์ฉ.
๋ถ๋ชจ { overflow: hidden; display: inline-block; /* ์ด๊ฑธ๋ก๋ ํด๊ฒฐ ๊ฐ๋ฅ. */ }
- ๋ถ๋ชจ ์์ ๋์ด ์ง์ ์ง์
- ํ์ ์
clear: both;
์ฌ์ฉ : ์์ float ํ์ ๊ฐ ์๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ- clear-fix
/* clear-fix : ๋ถ๋ชจ ์์์ ๋ง์ง๋ง์ผ๋ก ๊ฐ์์ block ํํ ๋ง์ง๋ง ์์์ ํ๋ ์ค. */ ๋ถ๋ชจ::after { contet: ''; display: block; clear:both; }
์ปจํ ์ธ ์ ๋ ฌ, ๊ณต๊ฐ์ ๋๋๋ ์์ฑ.
/* ์ ์ฉํ๋ฉด ๊ฐ๋ก๋ก ๋ฐฐ์ด๋๊ณ ์ธ๋ก๋ก ๋์ด ์ ์ฒด๋ฅผ ์ก๋ block ํํ๋ก */ .container { /* container๊ฐ block ํํ, inline ํํ */ display: flex, inline-flex; /* ๋ฐฐ์ด ๋ฐฉํฅ ๋ณ๊ฒฝ : ์ํ ์์ง ์ํ๋ฐ๋(์ค๋ฅธ์ชฝ๋ถํฐ 1 2 3 ๋ถ์...) ์์ง๋ฐ๋(์๋๋ถํฐ) */ flex-direction: row, column, row-reverse, column-reverse; }
๊ธฐ๋ณธ์ ์ผ๋ก display: flex ์ฃผ๋ฉด flex-item ๋์ด์ container ๋์ด๊ฐ ๋ง์ถฐ์ง. container ๋์ด๊ฐ ์๋ ๊ฒฝ์ฐ์๋, item์ด stretch ๋์ด ๋์ด๊ฐ ๋ง์ถฐ์ง
flex๋ ํ๋์ ์ถ(main-Axis)์ ๊ฐ์ง๊ณ flex-start, center, flex-end ์์ผ๋ก ์์ดํ ์ด ์ ๋ ฌ๋๋ค. (default : ์ผ์ชฝ ์ค๊ฐ ์ค๋ฅธ์ชฝ)
flex์ ๊ด๋ จ๋ ์ฌ๋ฌ ์ ๋ ฌ ๊ด๋ จ ์ธ๋ถ์ฌํญ์ ์กฐ์ ํ ์ ์๋ค.
.container { display: flex; /* ๋ฐฐ์ด ์์น ๋ณ๊ฒฝ */ justify-content: flex-start; /* flex- start ์์น๋ถํฐ ์์ */ justify-content: center; /* center์ center๊ฐ ์ค๊ฒ */ justify-content: flex-end; /* flex-end ์์น์์ ๋๋๊ฒ */ /* ์ ๋ ฌ ์์น ๋ณ๊ฒฝ */ justify-content: space-between; /* ์์ชฝ ๋์ ๋ง๊ฒ ๊ฐ๊ฒฉ ์๊น */ justify-content: space-around; /* ์์ดํ ๊ฐ์๋ก container ๋๋ด์ ๋ ๊ฐ ์์ญ๊ณผ item ์ฌ์ด์ ์ข์ฐ ๊ฐ๊ฒฉ ๊ฐ์. */ justify-content: space-evenly; /* ๊ฐ ์์ดํ ์ฌ์ด์ ๊ฐ๊ฒฉ์ด ๊ฐ์์ง */ }
๋ณด์กฐ(๊ต์ฐจ) ์ถ. axis๊ฐ row๋ฉด colum, axis๊ฐ colum์ด๋ฉด row
.container { display: flex; /* ๋ณด์กฐ์ถ ๊ธฐ์ค ์ ๋ ฌ : (cross-Axis ๋ฐฉํฅ) ์ญ ๋์ด๋จ, ์ค๊ฐ, ์์, ๋, ๋ฌธ์ ๋ฐ์ ๋ผ์ธ */ align-items: stretch(default), center, flex-start, flex-end, baseline; /* cross-Axis ์ item์ด ์ฌ๋ฌ์ค์ผ๋ ์ฌ์ฉ. */ align-content: center, flex-start, flex-end;
stretch๋ element ์ ๋์ด๋ฅผ ์ด๋ฆฌ์ง ์๋๋ค!! Flex ์๋ฒฝ ์ ๋ฆฌ
flex๋ ์์์ด ์๊ธฐ๋ณด๋ค ํฌ๋ค๊ณ ์์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ง ์๋๋ค. flex-wrap์ผ๋ก ๊ฐ์ธ์ค์ผ ์์ ์ ๋์ด๋งํผ ์ ์ฉ๋์ด์ ๋ด๋ ค๊ฐ.
.container { display: flex; flex-direction: column; justify-content: space-between; /* ์์์ ๊ฐ์ธ์ฃผ๋ ๊ธฐ๋ฅ : width๊ฐ ์ค๋ฉด ๋ด๋ ค๊ฐ, nowrap(default), ์๋ก ์ฌ๋ฆผ.*/ flex-wrap: wrap, nowrap, wrap-reverse; }
flex-basis : flex-item ํฌ๊ธฐ ๊ฒฐ์ . ์ถ์ ์์น์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. flex-basis๊ฐ ์ ์ฉ๋๋ฉด width, height๋ ๋ฌด์
flex-grow : flex-basis ์์ ํฌ๊ธฐ๊ฐ ๋์ด๋๋ ๋๋์ง ์ง์ . ํ๋๋ผ๋ ์ฃผ๊ฒ๋๋ฉด ํ๋ฉด ์ ์ฒด width์ ๋ง์ถฐ์ ๋์ด๋จ.
flex-shrink : flex-basis ์์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค์ด๋ ๋๋์ง ์ง์ ..child { flex-basis: auto(default) 100px; flex-grow: 1, 2, 3; /* flex-grow 1์ ์ค ๋ค๋ฅธ child์ ๊ฐ์ ํฌ๊ธฐ, 2๋ฐฐ, 3๋ฐฐ */ flex-shrink: 1, 2, 0; /* default(์ค์ด๋ ๋ค) 2๋ฐฐ ๋นจ๋ฆฌ์ค์ด๋ฌ ๊ณ ์ */ flex: 1; /* grow 1 shrink 1 basis 0(์๋์ผ๋ก ๋ง์ถฐ์ง) */ flex: 1 1 300px; }
๊ทธ์น๋ง, content๊ฐ ๋ค์ด์์ผ๋ฉด grow, shrink ๋์ด๊ฐ ์ ํํ ๋ง์ง ์์ ์๋ ์๋ค.
flex ์ก์ ๋ width, flex-basis, flex-grow ... ๋ฑ ๋จ์๋ฅผ ์ค ๋๋ ๋ฌด์กฐ๊ฑด ํ๋๋ก ํต์ผํ์!!! ์ฌ๋ฌ๊ฐ์ง๋ก ์ฃผ๋ฉด ์ฐ์ ์์๊ฐ ๋ฌ๋ผ์ ๋ค๋ฅด๊ฒ ์ ์ฉ๋ ์ ์๋ค. ์ถ์ฝํ๋ ํท๊ฐ๋ฆฌ๋๊น ์์ ํ์.
flex-item { algin-self: flex-start }; /* ์๋ง flex-start๋ก ๊ฐ */ flex-flow: column wrap; /* flex-direction, flex-wrap ๊ฐ์ด ์ธ ์ ์์ */
- align-self : ๋ถ๋ชจ์ align-items๋ฅผ ๋ฎ์. ๊ฐ๋ณ์ ์ธ align-items ์์ฑ ๋ถ์ฌ. (default - stretch)
- order : flex-item ๋ค์ ์์. ์๊ฐ ์์์๋ก ์ฐ์ ์์ ๋์์ ๋จผ์ ๋ฐฐ์ด๋จ. default 0
๋ฌดํ ์คํฌ๋กค ๋๋ ๊ฒ์ grid๋ก ๊ทธ๋ฆฌ์ง ๋ง์. grid๊ฐ ์์๋๋ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ๋ ํ๋ค๊ณ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, container์ ๋๋น๋ฅผ ๊ฝ ์ฑ์ฐ๋ block ์์ด๋ฏ ์์ธ๋ค. 3*3 ์ผ๋ก ๋ํ๋ด๊ณ ์ถ์ผ๋ฉด template ์ด์ฉํด์ row, column ์ค์ผํจ.
.container { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: repeat(3, 1fr); /* ํ 3๊ฐ ์ด 3๊ฐ, width 1fr(๋น์จ) (๊ฐ๊ฐ ๋์ด ๋์ผํด์ง.) */ gap: 10px 20px; /* gap row, col */ grid-area: 1/2/4/6; /* grid row start col start row end col end */ }
grid-area ๋ฅผ ์ด์ฉํด์ ์ค ์๋ ์๋ค.
.container { display: grid; gap: 10px; grid-template-areas: 'header header header' 'section section aside' 'footer footer footer' } .header { border: 10px solid tomato; grid-area: header; } .section { border: 10px solid darkcyan; grid-area: section; } .aside { border: 10px solid gold; grid-area: aside; } .footer { border: 10px solid pink; grid-area: footer; }
.item { /* ์ด 2์นธ ํฉ์น๋ ์ฝ๋ 3๊ฐ์ง */ grid-column-start: 1; grid-column-end: 3; grid-column: 1 / 3; /* grid-line 1๋ถํฐ 3๊น์ง */ grid-column: 1 / span 2; /* grid-line 1๋ถํฐ 2์นธ */ }
vendor prefix๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ์ ์๊ฒ ํด์ผ ํ๋ค.
hover : ๋ง์ฐ์ค ์ฌ๋ฆผ
active : ํ์ฑํ (ex. ๋ฒํผ ๋๋ฅด๊ณ ์๋.)
focus : tap ๋๋ฌ์ ์ด๋ํ ๋ ์ ํ๋์ด ์๋ ๋ถ๋ถ
CSS ์์ฑ ๊ฐ์ด ๋ณํ ๋, ๋ณํ๊ฐ ์ผ์ ์๊ฐ์ ๊ฑธ์ณ์ ์ผ์ด๋๊ฒ ํ๋ ๊ฒ.
/* ๋นจ๊ฐ์์ด ํ๋์์ผ๋ก ๋ฐ๋๋ฉด์ transition */ div { background-color: red; transition-duration: 3s; /* 3์ด๋์ ๋ฐ๋ */ transition-timing-function: ease, linear, ease-in, ease-out, ease-in-out, steps(int, start|end), cubic-beizer, initial, inherit transition-delay: 2s; transition: background-color 3s ease 2s; /* ์์ ์์๋๋ก ํฉ์ณ ์ธ ์ ์๋ค */ } div:hover { /* hover, active, ... ๋ง์ ๊ฒ์ ์ ์ฉ ๊ฐ๋ฅ */ background-color: blue; }
tag ์ ์์ฑ(์์, ๋์ด, ...)์ด ๋ณํ ๋ ๋ณํํ๋ ๋จ๊ณ์ ์ ๋๋ฉ์ด์ ์ ์ค ์ ์๋ค.
transition: property duration timing-func delay
property - all, none, property, initial, inherit , ...
initial์ ์ด๊ธฐํ.
object๋ฅผ ๋ณํํ ๋ ์ฌ์ฉํ๋ ์์ฑ.
transform: translate(x, y); /* ์ด๋ */ scale(x, y) /* ํฌ๊ธฐ */ skew(x,y) /* ๊ธฐ์ธ๊ธฐ */ rotate(180deg) /* ํ์ */ translateX(x), scaleY(y) /* x์ถ y์ถ ๋ฐ๋ก๋ ๊ฐ๋ฅ */
transform-origin: top right; /* ํ์ ์ถ ์ด๋. */ transform-origin: 50% 100px;
Q. ๋ ๋ค ๋ฌผ์ฒด๋ฅผ ์ด๋ค ์ขํ๋ก ์์ง์ด๋ ์์ฑ์ธ๋ฐ, ์ธ์ ์ด๋ค๊ฑธ ์ฌ์ฉํ๋๊ฐ?
A. ์ ์ ์ธ ์ฌ์ดํธ์์ ๋จ์ ๋ฐฐ์น ์์ position, ๋์ ์ผ๋ก ์ด๋ํด์ผํ๋ ๊ฒฝ์ฐ์๋ translate.
Why?
๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ์ฝ๋ ๊ณผ์ \ 1. ํ์ฑ : html -> DOM tree 2. ์คํ์ผ ๊ณ์ฐ : CSS -> CSSOM 3. ๋ ์ด์์ : CSSOM ์ ๋ณด๋ฅผ ํ ๋๋ก DOM์ ๋ฐ๋ผ๊ฐ๋ฉด์ ํ๋ฉด์ ๋ณด์ด๋ ์ ๋ณด๋ง ๋จ๊ฒจ์ layout tree(render tree) ์์ฑ 4. ํ์ธํธ : ๋ ์ด์์ ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์๊ฐ์ ๋ถ๋ถ์ ๊ทธ๋ฆฌ๋ ํ์ธํธ ๊ธฐ๋ก ์์ฑ 5. ์ปดํฌ์งํ : ๊ฐ ๋ ์ด์ด๋ฅผ ํฝ์ ๋ก ํํํ์ฌ ํ๋ฉด์ ๊ทธ๋ฆผ \ +1) reflow : ๋ ์ด์์ ๋ณ๊ฒฝ ์ ์ํฅ ๋ฐ๋ ๋ ธ๋๋ค์ ์์น๋ฅผ ๋ค์ ๊ณ์ฐํด์ ๋ ๋ ํธ๋ฆฌ ์ฌ์์ฑ +2) repaint : reflow ๋๋๊ณ ๋ ๋ ํธ๋ฆฌ ๋ค์ ๊ทธ๋ฆผ. ์์น์ ์๊ด ์์ด ์คํ์ผ๋ง ๋ณ๊ฒฝ๋๋ฉด reflow ์์ด repaint๋ง ์ํ
๋ง์ฝ css๋ฅผ ํตํด ๋ ์ด์์์ด ๋ฐ๋๋ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ๋งค ํ๋ ์๋ง๋ค reflow, repaint ๊ณผ์ ์ ์ํํด์, ๋ธ๋ผ์ฐ์ ์ ์๋นํ ๋ถ๋ด์ด ๊ฑธ๋ฆผ. transform ์ ๊ฒฝ์ฐ ๊ทธ ๋ถ๋ด์ GPUํํ ์ค ์ ์๋ค.
transition๊ณผ animation์ ์ฐจ์ด : animation์ css ์์ฑ๊ฐ์ ๋ณํ ์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅ. ๊ทธ๋ฆฌ๊ณ ๋์ค์ JavaScript๋ฅผ ๋ถ์ผ ์ ์๋ค.
tag { animation-name: name; animation-duration: 2s; animation-iteration-count: 3, infinite; animation-delay: 3s; animation-direction: normal, reverse, alternate(์๋ฐฉํฅ->์ญ๋ฐฉํฅ), alternate-reverse; animation-timing-function: ease, linear, ease-in, ease-out, ease-in-out; animation-play-state: running, posed; }
@keyframes animation-name { /* 0%~100%๋ก ์ฌ๋ฌ๊ฐ์ Step์ผ๋ก ๋๋ ์ ์๋ค. */ from { animation ์์ ์์ฑ } to { animation ๋ ์์ฑ } }
animation-fill-mode: forwards; /* ์ ๋๋ฉ์ด์ ์ด ๋๋๋ฉด ์ฒ์์ผ๋ก ๋์๊ฐ์ง ์๊ณ ๋ฉ์ถ๋ ํจ๊ณผ */
์ด๋ฏธ์ง ํ์ผ์ ๊นจ์ง์ง ์๋ SVG๋ก ์ฌ์ฉํ ์ ์๋ค. 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ. ์์ฆ์ ๊ทธ๋ ๊ฒ ๋ง์ด ์ฐ์ด์ง ์๋๋ค. svg path, g tag์ ์์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, color ๊ฐ ์๋๋ผ fill ์ ์ด์ฉํ์.
transform ์ ์ด์ฉํด์ transition, animation์ ์ค ๋, ์ค ์์์ ๋ฐ๊ฟ ์์ฑ์ css ๊ฐ์ ๋ฏธ๋ฆฌ ์ฃผ๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง๋ค ๊ด๋ จ ๊ธ, ์ฑ๋ฅ ์ต์ ํ
์๊ทผ๋ฒ. ๋์์ ๊ฑฐ๋ฆฌ๋ผ์ ๊ฐ์ด ์์์๋ก ์ปค๋ณด์!!
div { perspective: 800px; }
๋ถ๋ชจ๊ฐ ์์์ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์์ค์ ์ด ๋ถ๋ชจ์ ์ค๋ฅธ์ชฝ ๋์ ์๋ค.
perspective-origin: 50% 50% ๊ฐ default
๋์๊ฐ๋ ์ง์ง ์นด๋์ฒ๋ผ ์๋ฉด์ธ ์์ฑ์ ๊ฐ์ง๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ๋ท๋ฉด์ ๋ง๋ค์ด์ผํจ.
/* ํต์ฌ ๋ถ๋ถ */ .front { transform: rotateY(0deg); } .back { transform: rotateY(-180deg); } /* ๋ท๋ฉด์ ๋ฐ๋์ชฝ์ผ๋ก ๋ค์ง์ด์ ธ ์๋ ์ํ!!! */ /* ์ฌ๋ ธ์ ๋ ๋์๊ฐ ๋ฐํด ์ ๋งํผ ์ค์ ํ๋ฉด ๋๋ค. */ .card:hover .front { transform: rotateY(180deg); } .card:hover .back { transform: rotateY(0deg); }
.card { width: 500px; height: 500px; perspective: 400px; /* ํด๋น ํจ๊ณผ๋ฅผ transition์ด ์๋๋ผ animation์ผ๋ก ์ฃผ๊ณ ์ถ๋ค๋ฉด ๋ถ์ด์. */ transform-style: preserve-3d; } .item { width: 500px; height: 500px; backface-visibility: hidden; /* transition์ item์ ์ค์ผํ๋ค๋ ์ฌ์ค. */ transition: all 1.2s; }
<div class="card"> <div class="item front">์๋ฉด</div> <div class="item back">๋ท๋ฉด</div> </div>
๋ฐ์ํ ์น: ๊ธฐ๊ธฐ๋ณ๋ก css ๋ค๋ฅด๊ฒ ๋ฌถ์ด์ ํ๋ฉด ๋์. ๋ณดํต ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ด ์๋์ ์ผ๋ก ๋ง๊ธฐ ๋๋ฌธ์, ๋ชจ๋ฐ์ผ ๋จผ์ ๋ง๋ค๊ณ ์น ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. m. ์ด๋ mobile. ์ฒ๋ผ url์ ๋ฐ๋ก ๋นผ๋ ๊ฒฝ์ฐ์๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ ์๋ ์๋ค.
<link media="all"> @media all { } all(์ ๋ถ), aural(์์ฑ), braile(์ ์), handheld(์์ ์คํฌ๋ฆฐ), print(์ธ์), projection(ํ๋ก์ ํฐ), screen(์ปดํจํฐ ์คํฌ๋ฆฐ), tv(์์ฑ, ์์ ๋์ ์ถ๋ ฅ ์ฅ์น), embossed(์ธ์๋ ์ ์ ํ์ ์ฅ์น)
and not only ,(or๊ณผ ๊ฐ์) ์ฐ์ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ
/* ์ด๋ฐ์์ผ๋ก width์ ๋ฐ๋ฅธ ์ปดํจํฐ, ํ๋ธ๋ฆฟ, ํฐ ํ๋ฉด์ ์ ์ด. */ @media all and (min-width: 960px) @media all and (max-width: 959px) and (min-wdth: 760px) @media all and (max-wdth: 759px)
๋ง์ด ์ฌ์ฉํ๋ค. css 1px์ ๋ค์ด๊ฐ๋ ๋๋ฐ์ด์ค ์คํฌ๋ฆฐ ํฝ์ ์์ ๋น์จ
ํด์๋์ ๋ฐ๋ฅธ ์ด๋ฏธ์ง ๋ณํ๋ฅผ ์ค ๋ ์ฌ์ฉ. ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฌ ๊ธฐ๊ธฐ์์ ๊ฐ์ ํฌ๊ธฐ๋ก ๋ณด์ฌ์ฃผ๋ ค๋ฉด ๊ณ ํด์๋ ๊ธฐ๊ธฐ์์๋ ์ด๋ฏธ์ง ํ์ง์ด ๋จ์ด์ง๋ฏ๋ก, ํน์ ๊ธฐ๊ธฐ์์ ์ด๋ฏธ์ง๋ฅผ ๊ต์ฒดํด์ค๋ค.-webkit-min-device-pixel-ratio: -webkit-max-device-pixel-ratio: -webkit-device-pixel-ratio:
@media print { /* ํ๋ฉด์๋ ์๋ณด์ด๋ ์ถ์ฝ์ด๊ฐ ์ธ์ ํ์ด์ง์์๋ ๋ณด์ธ๋ค. */ abbr::after { content: '('attr(title)')'; } }