[Front-end๐Ÿฆ] #9 Media Query (+ z-index, CSS stacking order)

๋˜์ƒยท2021๋…„ 11์›” 10์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
19/58
post-thumbnail

1. Coding Convention

NHN, Google์˜ HTML, CSS Convention ์„ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ์‚ดํŽด๋ณด๋˜ ์ค‘ class๋ฅผ ๋งจ ๋’ค์— ์ฃผ๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค๋Š” ๋‚ด์šฉ๋„ ๋‚˜์™”๋Š”๋ฐ, SVG ํŒŒ์ผ ์—ด์–ด๋ณผ ๋•Œ ๋งŽ์ด ๋Š๊ผˆ๋‹ค

์ถ”๊ฐ€๋กœ ๋Œ€๊ธฐ์—…์˜ ๊ฒฝ์šฐ๋Š” ํฌ๋กค๋ง์„ ๋ง‰๊ธฐ ์œ„ํ•ด CSS ๋‚œ๋…ํ™”๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— convention์„ ๊ณต๊ฐœํ•˜๋Š” ๊ณณ์ด ์•„๋‹ˆ๋ฉด ์–ด๋–ค ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ํฌ๋กค๋ง์€ ์—…๋ฌด ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด ํ•˜๋Š”๋ฐ, ์„œ๋น„์Šค์— ๋ถ€ํ•˜๊ฐ€ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ธฐ์—…์—์„œ๋Š” API server๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.



2. Animation

2-1. ์นด๋“œ ๋’ค์ง‘๊ธฐ

์–ด์ œ ํ˜ผ์ž์„œ ์ฐพ์•„์„œ ์ดํ•ดํ–ˆ๋Š”๋ฐ๋„ perspective: 400px; ์€ ๋ถ€๋ชจ์— backface-visibilty: hidden; ์„ ์นด๋“œ ์•ž ๋’ท๋ฉด์— ๋‹ค ์ค˜์•ผ ํ•œ๋‹ค๋Š”๊ฒŒ ํ—ท๊ฐˆ๋ ค์„œ ์ข€ ํ—ค๋งธ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค. #6-2 ์— ์นด๋“œ ๋’ค์ง‘๊ธฐ๋„ ์ •๋ฆฌํ•ด ๋‘์—ˆ๋‹ค.


2-2. hover ์™„๋ฒฝ ์ •๋ฆฌ

065.html์— 20๊ฐœ์˜ ๋ฒ„ํŠผ ์‚ฌ์‹ค div ์„ ๋งŒ๋“ค์–ด์„œ ์‹ค์Šตํ•ด ๋ณด์•˜๋Š”๋ฐ ๊ทธ ์ค‘ ์‹ ๊ธฐํ•œ ํšจ๊ณผ์ด๋ฉด์„œ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š” ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” font-size ๊ฐ™์€ ์—†์–ด๋„ ๋˜๋Š” ๊ฒƒ๋“ค์„ ๋บ€ ์ฝ”๋“œ์ด๋‹ค.

div {
    position: relative;
    width: 200px;
    height: 50px;
    background: cornflowerblue;
    color: white;
    border: 2px solid black;
    border-radius: 15px;
    transition: all 2s;
    overflow: hidden;
}
div::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: greenyellow;
    transition: all 5s;
    transform: rotateX(90deg);
}
div:hover::before {
    transform: rotateX(0);
    z-index: -1;
}
div::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: greenyellow;
    transition: all 5s;
    transform: rotateY(90deg);
}
div:hover::after{
    background-color: blue;
    transform: rotateY(0);
    z-index: -1;
}
div:hover {
    color: tomato;
    z-index: 1;
}

์ด๋Ÿฐ ์ฝ”๋“œ์ธ๋ฐ, ํŒŒ๋ž€์ƒ‰ ๋ฐฐ๊ฒฝ์˜ div์— ๊ฐ€์ƒ ์š”์†Œ(::before, ::after)๋กœ ์ž์‹์„ ๋งŒ๋“ค์–ด์„œ x์ถ• ๋ฐฉํ–ฅ, y์ถ• ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ๋Œ๋ ค์„œ ์•ˆ๋ณด์ด๊ฒŒ ์ฒ˜๋ฆฌํ•ด๋‘” ๋’ค, hover์ผ ๋•Œ 90๋„๋ฅผ ๋‹ค์‹œ ๋Œ๋ ค์„œ ๋งˆ์น˜ ๊ฐ€์šด๋ฐ์„œ๋ถ€ํ„ฐ ์‹ญ์ž๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ํšจ๊ณผ๋ฅผ ์ค€ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ํšจ๊ณผ๋ฅผ ์ค˜์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

2-3. z-index

์œ„์˜ ์ฝ”๋“œ์™€ ๊ด€๋ จํ•ด์„œ ๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ๋ถ„์˜ ์งˆ๋ฌธ์„ ๋ณด๊ณ  ๋‚˜์„œ ๊ฐ™์ด ๊ถ๊ธˆํ•ด์กŒ๋Š”๋ฐ,

  1. ์ด ์ฝ”๋“œ์—์„œ hover ์ƒํƒœ์ผ ๋•Œ div:hover์˜ z-index๊ฐ€ 1์ด๋ผ ๊ธ€์”จ color๋Š” ์ ์šฉ์ด ๋˜๋Š”๋ฐ, div์— ์„ค์ •ํ•œ background-color: cornflowerblue; ๋Š” ์–ด๋””๋กœ ๊ฐ„๊ฑด์ง€, (hover ๋ฐฐ๊ฒฝ์ด ๊ฐ‘์ž๊ธฐ ํˆฌ๋ช…์ผ๋ฆฌ๋Š” ์—†์œผ๋‹ˆ๊นŒ...)
  2. ์™œ div:hover::before, div:hover::after / div:hover์˜ z-index๋ฅผ -1 / 1 ๋กœ ์ฃผ๋ฉด ๊ธ€์”จ๊ฐ€ ๋ณด์ด๊ณ  auto or 0 / 1 ๋กœ ์ฃผ๋ฉด ๊ธ€์”จ๊ฐ€ ์•ˆ๋ณด์ด๋‚˜?

์ด๊ฑด ์ฐพ์•„๋ณด๊ณ  ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์Œ“์•„๋ณด๋ฉด์„œ ์ •๋ฆฌํ•ด๋ดค๋‹ค.

+๋งŒ๋“ค์–ด์ฃผ์‹  ์ด๋ฏธ์ง€!

  1. CSS Stacking Order : normal, z-index ๋“ฑ์ด ์–ด๋–ค๊ฒŒ ์•ž์— ์Œ“์ด๋Š”์ง€
  2. parent, child z-index : ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์ผ๋•Œ z-index๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€
  3. DOM-tree div ์•ˆ์— ์“ด text๋„ div์˜ ์ž์‹์ด๋‹ค!!!!
  4. opacity๊ฐ€ stacking order์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค : ์ด๊ฑด... ๋‚˜์ค‘์— ์ฝ”๋”ฉํ•  ๋•Œ ๋‚œ๋ฆฌ๋‚ ๊ฑฐ๊ฐ™๋‹ค.....
  5. transform, opacity ๊ฐ€ ์„ค์ •๋˜๋ฉด ์ƒˆ๋กœ์šด stacking order๊ฐ€ ์ƒ๊ธด๋‹ค

์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋“ค์˜ z-index ์†์„ฑ ๊ฐ’์€ ์˜ค๋กœ์ง€ ๋ถ€๋ชจ ์•ˆ์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง. (๋ถ€๋ชจ์™€ ์ž์‹์ด ๊ฐ™์€ flow์— ์žˆ์„ ๋•Œ) ๋ถ€๋ชจ ๋‚ด์˜ text๋„ ์ž์‹์ด๊ณ , text์˜ z-index default ๊ฐ’์€ 0์ด๋ฏ€๋กœ, ์•„๋ž˜์— ์ •๋ฆฌํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋œ๋‹ค. ๋ถ€๋ชจ๊ฐ€ position์ด ์—†๋Š” normal flow ๋ผ๋ฉด z-index ๊ฐ€ -1 ์ธ child3์€ parent1 ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค.

+) z-index ๋Š” position์ด ์žˆ์–ด์•ผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.



3. Media Query

#6-2์— ์ •๋ฆฌํ–ˆ๋‹ค. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๋‚ด์šฉ์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ์ธํ”„๋Ÿฐ์—์„œ ๋“ค์€ @media ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด์—ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค๋ฃฌ ๋’ค ๋ฐ”๋กœ ์‹ค์Šต์œผ๋กœ ๋“ค์–ด๊ฐ”๋‹ค.

1. 1๋งŒ ์‹œ๊ฐ„์˜ ๋ฒ•์น™ ์›นํŽ˜์ด์ง€ ์ œ์ž‘ - Media Query

media query๋ฅผ ์‚ฌ์šฉํ•ด์„œ 1๋งŒ ์‹œ๊ฐ„์˜ ๋ฒ•์น™ ์›นํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜๋‹ค. ํŽ˜์ด์ง€ ๊ตฌ์กฐ ์ž์ฒด๋Š” ๋‹จ์ˆœํ–ˆ๋Š”๋ฐ...

์ด๋Ÿฐ ์ค„๋ฐ”๊ฟˆ์— ์šฐ๋ฆฌ๋Š” ์ด์ƒ์ ์ธ ์ฝ”๋“œ ์งœ๋Š”๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด๋‹ˆ brํƒœ๊ทธ๋„ pํƒœ๊ทธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„... span๋„.. ์“ฐ์ง€ ์•Š๋Š”๊ฑธ ๊ถŒ์žฅํ•œ๋‹ค๊ณ  ํ•˜์…จ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์›น์‚ฌ์ดํŠธ๋ฅผ ๋‹ค ๋’ค์ ธ๋ด๋„ brํƒœ๊ทธ๋กœ ๋‚˜๋ˆด๋‹ค...... ๊ทธ๊ฑธ ๋ณด๋‹ˆ ๋” ์ด์ƒ ๊ณ ๋ฏผํ•ด๋„ ๋‹ต์ด ๋‚˜์˜ค์ง€ ์•Š์•„์„œ ์ผ๋‹จ์€ ๋˜‘๊ฐ™์ด ๋ณด์ด๊ฒŒ๋ผ๋„ ๋งŒ๋“ค์ž ํ•˜๊ณ  pํƒœ๊ทธ ๋‚˜๋ˆ ์„œ ์Šคํƒ€์ผ๊นŒ์ง€ ๋‹ค ์ ์šฉํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ media query๋Š” ์ œ๋Œ€๋กœ ์ ์šฉ๋„ ๋ชปํ–ˆ๋‹ค. ๋˜, background-image ๋กœ ๋„ฃ์—ˆ๋”๋‹ˆ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ... background-size๋กœ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค........ ์ด๊ฒƒ๋„ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•˜๋‹ค. ๋‚ด์ผ ์ˆ˜์—… ๋“ฃ๊ณ  #10 ์— ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ฆด ์˜ˆ์ •์ด๋‹ค.

+) background-image ์˜ ๊ฒฝ์šฐ ํฌ๊ธฐ์— ๋งž์ถฐ ๋„ฃ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜์ด๊ณ , ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ width: 100%๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ค„์–ด๋“ค๊ฒŒ ๋Œ€์‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋“œ๋ฌผ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ์น˜๋งŒ height์— vw ๋‹จ์œ„๋ฅผ ์จ์„œ ์ค„์–ด๋“ค๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์—ˆ๋‹ค.




4. ๋Š๋‚€์ 

  • ๋ชจ๋ฐ”์ผ์„ ์šฐ์„ ์ ์œผ๋กœ ์„ค๊ณ„ํ•œ๋‹ค๋Š”๊ฒŒ ์ถฉ๊ฒฉ์ ์ด์—ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๊ฒฝํ—˜์ƒ PC ํ™”๋ฉด๋งŒ ์„ค๊ณ„ํ•ด์„œ ๋ชจ๋ฐ”์ผ์—์„œ ํ™•๋Œ€ํ•ด์„œ ๋ณด๋Š”๊ฒŒ ๋ชจ๋ฐ”์ผ์—๋งŒ ๋Œ€์‘์ด ๋˜์–ด์žˆ์–ด์„œ ํฐ ํ™”๋ฉด์œผ๋กœ ๋ชป๋ณด๋Š”๊ฒŒ ๋” ๋ถˆํŽธํ•ด์„œ ๋‹น์—ฐํžˆ PC ํ™”๋ฉด ๋จผ์ € ์„ค๊ณ„ํ•˜๋Š” ์ค„ ์•Œ์•˜๋‹ค..
  • ์˜ค๋Š˜ 2๋ฒˆ์— ์žˆ๋Š” z-index๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์— ์ง‘์ฐฉํ•ด์„œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ๋๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. ์ง‘์ฐฉ์„ ๋ฒ„๋ฆฌ๊ณ  ๋‹ค์Œ ๊ฒƒ์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด์•ผ๊ฒ ๋‹ค.
profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€