[CSS] Advanced

Yunhye Parkยท2023๋…„ 9์›” 19์ผ
0
post-thumbnail
post-custom-banner

1. position

  • static (default)
  • relative
  • absolute
  • fixed

static์ด ์•„๋‹Œ postion์˜ ์†์„ฑ ์‚ฌ์šฉ ์‹œ

  • top, right, bottom, left ์ค‘ 0๊ฐœ ์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ์ž‘๋™ํ•œ๋‹ค.
    • - ๊ฐ’ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.
  • z-index๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ์˜ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex. absolute๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด top ๋“ฑ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์†์„ฑ์ด ์žˆ์–ด์•ผ ์›๋ž˜์˜ ํŠน์„ฑ๋Œ€๋กœ, ์ฆ‰ ๋ถ€๋ชจ ์š”์†Œ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜๋œ๋‹ค.

  • top - bottom left - right ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ

1.1 relative

  • ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„์—์„œ ๋ฐฐ์น˜๋œ๋‹ค.
  • ์š”์†Œ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜ ์ด๋™ํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ์š”์†Œ๋Š” ์ด ์œ„์น˜์˜ ๋ณ€ํ™”์— ์˜ํ–ฅ ์—†์Œ. ๊ทธ๋ž˜์„œ relative๋กœ ์˜ฎ๊ธด ์š”์†Œ๊ฐ€ ํƒ€ ์š”์†Œ์— ๋ ˆ์ด์–ด์ฒ˜๋Ÿผ ๋ฎ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. -> z-index๋กœ ์ˆœ์„œ ์„ค์ • ๊ฐ€๋Šฅ

1.2 absolute

  • ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„์—์„œ ๋ฒ—์–ด๋‚œ๋‹ค.
  • ํฌ์ง€์…˜์ด ์กด์žฌํ•˜๋Š”(relative) ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ€๋ชจ ์š”์†Œ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜.
  • ์—†์œผ๋ฉด body ๊ธฐ์ค€.

1.3 fixed

  • ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„์—์„œ ๋ฒ—์–ด๋‚˜ ์Šคํฌ๋กค ์—ฌ๋ถ€ ๋“ฑ๊ณผ ์•„๋ฌด ์ƒ๊ด€ ์—†์ด ์ง€์ •ํ•œ ์œ„์น˜์— ๊ณ ์ •๋œ๋‹ค.
  • ๋ถ€๋ชจ ์ƒ๊ด€ ์—†์ด viewport(browser) ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜.

1.4 sticky

  • ์ฒ˜์Œ์—” static์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • scroll์„ ํ•˜๋‹ค๊ฐ€ ํŠน์ • ์ง€์ ์— ๋‹ฟ์•˜์„ ๋•Œ๋ถ€ํ„ฐ ์œ„์น˜๊ฐ€ fixed์ฒ˜๋Ÿผ ๊ณ ์ •๋œ๋‹ค.
  • ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜๋œ๋‹ค. ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ scroll ์š”์†Œ์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ๋‹ค์‹œ ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„์„ ๋”ฐ๋ผ ๋ทฐํฌํŠธ์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
  • aside ์ปจํ…์ธ (๊ด‘๊ณ )์—์„œ ์ž์ฃผ ์“ฐ์ธ๋‹ค.
  • -x, -y์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ(ex.overflow-x) ๋ถ€๋ชจ ์š”์†Œ์˜ overflow ์†์„ฑ์ด hidden, auto, scroll์ด๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ถ€๋ชจ ์š”์†Œ์˜ ๋†’์ด๋ฅผ %๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋‹จ์œ„๋กœ ์„ค์ •ํ•ด์ค˜์•ผ ์ž‘๋™ํ•œ๋‹ค. ์Šคํฌ๋กค์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋™์ž‘ํ•˜๋Š” ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๋‹ค.

z-index ์†์„ฑ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜์ค‘์— ์“ด ๊ฒŒ ์œ„๋กœ ๊ฒน์น˜์ง€๋งŒ, z-index๋กœ stack order์„ ์ฃผ๋ฉด ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€œ
  • ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ์œ„! (์Œ์ˆ˜๊ฐ’์€ ๋’ค๋กœ, ์œ„๋กœ ๋ณด๋‚ด๋ ค๋ฉด ์–‘์ˆ˜)
  • ๊ฐ™์€ ๊ฐ’ ์ž…๋ ฅ ์‹œ ๋‚˜์ค‘์— ์ž…๋ ฅํ•œ ๊ฒƒ์ด ์œ„์— ๋œฌ๋‹ค.
    BUT ๋ถ€๋ชจ ์š”์†Œ๋Š” ์ž์‹ ์š”์†Œ ์œ„์— ๋œฐ ์ˆœ ์—†๋‹ค.

2. transform

2.1 skew(deg,rad)

๊ธฐ์šธ๊ธฐ

2.2 scale()

ํฌ๊ธฐ

2.3 rotate(deg)

ํšŒ์ „

2.4 translate(px,%,em)

์ด๋™

  • ๊ฐ™์€ css ์†์„ฑ์€ ํ•œ ์ค„ ๊ธฐ์ž…
    ex.
.img-transform:active {
	transform: translate(10px, 10px) rotate(30deg);
}

transform ๊ธฐ์ž… ์ˆœ์„œ

  • perspective translate scale rotate skew
    (์›๊ทผ๋ฒ• ์ด๋™ ํฌ๊ธฐ ํšŒ์ „ ๊ธฐ์šธ์ž„)
  • ์—†์„ ์‹œ ์ƒ๋žต

3. transition

transition: ์†์„ฑ๋ช… ์ง€์†์‹œ๊ฐ„ ํƒ€์ด๋ฐํ•จ์ˆ˜ ๋Œ€๊ธฐ์‹œ๊ฐ„;

  • ์ง€์†์‹œ๊ฐ„์€ ํ•„์ˆ˜์ž…๋ ฅ

  • default: ์†์„ฑ๋ช… = all, ํƒ€์ด๋ฐํ•จ์ˆ˜ = ease

  • ๋Œ€๊ธฐ์‹œ๊ฐ„์€ transition-delay๋กœ ๋”ฐ๋กœ ๊ธฐ์ž… ๊ฐ€๋Šฅ.

  • ์›๋ž˜ ์š”์†Œ๊ฐ€ ์•„๋‹Œ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ์˜ ์š”์†Œ์— ๊ธฐ์ž…
    ex. hoverํ•  ๋•Œ div ํฌ๊ธฐ ๋ฐ”๊พธ๊ธฐ

div {
width: 100px;
height: 100px;
background-color: gray;
}

div:hover {
width: 300px;
height: 300px;
transition: all 1s ease-in-out .5s
}

cf.
width height ์ž…๋ ฅ VS transform: scale();

  • width์™€ height ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ ์ œ์ž๋ฆฌ์—์„œ transition
    (width๋Š” ์™ผ์ชฝ ๋์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ, height์€ ๋งจ์œ„์—์„œ ์•„๋ž˜๋กœ ์ปค์ง€๋ฏ€๋กœ)
  • transform:scale ์‚ฌ์šฉ ์‹œ ์š”์†Œ์˜ ์ค‘์•™์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ๋ฐฉ์ด ์ปค์ง

4. display

4.1 inline

content ํฌ๊ธฐ๋งŒํผ ์ž๋ฆฌ ์ฐจ์ง€

  • width ์—†์Œ, height ์—†์Œ
  • padding, margin์€ ์ขŒ์šฐ๋งŒ(์•„๋ฌด๋ž˜๋„ text๋‹ˆ๊นŒ ๊ธ€์ž ํฌ๊ธฐ๋Š” ์žˆ์œผ๋ฏ€๋กœ)

4.2 block

width, height, margin ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

4.3 inline-block

inline์ด๋ฉด์„œ block ํŠน์ง• ๋ถ€์—ฌ

  • content ํฌ๊ธฐ๋งŒํผ ์ฐจ์ง€ + width, height, margin ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

4.4 flex

์ž์‹ ์š”์†Œ๋ฅผ inline์œผ๋กœ ๋งŒ๋“ฆ

display๊ฐ€ flex๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๋“ค :

4.4.1 flex-direction

  • row-reverse : ๋ถ€๋ชจ์ธ div๋Š” width๊ฐ€ 100%์ด๋ฏ€๋กœ, ์ด ๊ฒฝ์šฐ ์ž์‹๋“ค์€ ๋ทฐํฌํŠธ ์˜ค๋ฅธ์ชฝ ๋์—์„œ ํ–‰ ๊ธฐ์ค€ ๊ฑฐ๊พธ๋กœ ๋ฐฐ์น˜
  • column-reverse : height์€ content ํฌ๊ธฐ๋งŒ ํฌํ•จ์ด๋ฏ€๋กœ, ๋ถ€๋ชจ div์— height ์ง€์ • ์‹œ row-reverse์ฒ˜๋Ÿผ ์•„๋ž˜ ๋์—์„œ ๊ฑฐ๊พธ๋กœ ์ •๋ ฌ

4.4.2 flex-wrap

๋ถ€๋ชจ ์œ„์น˜ ์ ˆ๋ฐ˜์„ ๊ธฐ์ค€์œผ๋กœ ์ค„๋ฐ”๊ฟˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ–‰๊ฐ„ ์กด์žฌ
ex.

4.4.3 justify-content

  • space-between
    ๋ถ€๋ชจ ํฌ๊ธฐ ์–‘๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋™์ผ ์—ฌ๋ฐฑ

  • space-around
    ์š”์†Œ๋ณ„๋กœ ๋™์ผํ•œ ์—ฌ๋ฐฑ ๋ถ€์—ฌ (์–‘์˜† margin์ฒ˜๋Ÿผ)
    ์š”์†Œ์™€ ์š”์†Œ ๊ฐ„ ๋™์ผ ์—ฌ๋ฐฑ์ด ๊ฐ๊ฐ 2๋ฒˆ ์นด์šดํŠธ

  • space-evenly
    ๋ชจ๋“  ์—ฌ๋ฐฑ ํฌ๊ธฐ ๋™์ผ

4.4.4. align-items

  • flex-start
    flexbox์˜ ์™ผ/์œ„์ชฝ ์‹œ์ž‘์ 

  • flex-end
    flexbox์˜ ์˜ค๋ฅธ/์•„๋ž˜์ชฝ ๋์ 

  • center
    ์ค‘์•™

cf.
div ์•ˆ text ์ค‘์•™ ๋ฐฐ์—ด

<div>์ •๋ ฌํ•  ํ…์ŠคํŠธ</div>
text-align: center;
line-weight: 100px; (๋ถ€๋ชจ์˜ hegith๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •)

4.4.5 align-content

์—ฌ๋Ÿฌ ์ค„์— ๊ฑฐ์นœ ์ž์‹ ์š”์†Œ๋“ค์„ ํ•œ ๋ฌถ์Œ์œผ๋กœ ๋ชจ์•„์„œ ๋ฐฐ์น˜
ex.


Recap : ๊ฐ€์ƒ์š”์†Œ ์„ ํƒ์ž, display, position

w. Naver header Btn

#header
.header_inner .menu_area .btn_menu[aria-expanded=true]::before {
    content: "";
    display: block;
    position: absolute;
    top: 1px;
    left: 1px;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background-color: #e7eced;
    }

๋ถ€๋ชจ๋Š” div, ์ž์‹์€ button.

::before

  • ์„ ํƒ์ž ํŠน์„ฑ์ƒ content ์†์„ฑ ํ•„์ˆ˜๊ธฐ์ž…
  • inline์š”์†Œ์ธ button์— ๋ถ€์—ฌ๋œ ์„ ํƒ์ž์ด๋ฏ€๋กœ, display:block์„ ํ†ตํ•ด width์™€ height์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’(static)์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํฌ์ง€์…˜์ด ์ฃผ์–ด์ง€๋ฉด, top-bottom left-right๋กœ ์œ„์น˜ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํฌ์ง€์…˜์˜ ํŠน์ง•์ด ๋ถ€์—ฌ๋œ๋‹ค.
    ์ฆ‰ ๋ถ€๋ชจ div์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ 1px, ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1px ์›€์ง์ธ ์œ„์น˜.

::after

#header
.header_inner .menu_area .btn_menu::after {
    content: "";
    display: block;
    background-image: url(https://----.png);
    background-size: 435px 414px;
    background-position: -82px -329px;
    background-repeat: no-repeat;
    width: 26px;
    height: 26px;
    position: relative;
}
  • ์„ ํƒ์ž ํŠน์„ฑ์ƒ content ์†์„ฑ ํ•„์ˆ˜๊ธฐ์ž…
  • url์€ ์—ฌ๋Ÿฌ ์•„์ด์ฝ˜์ด ๋‹ด๊ธด pngํŒŒ์ผ. ๊ทธ์ค‘์—์„œ ํŠน์ • ์˜์—ญ์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•˜์—ฌ background-position/size/repeat ์†์„ฑ ๋ถ€์—ฌ.
    - ๊ฐ€๋กœ ์‚ผ์„ ์„ background-image๋กœ ์„ค์ •.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ width์™€ height์„ ์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ block์œผ๋กœ display.
  • ์ž๊ธฐ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜. ์‚ผ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฒ„ํŠผ ์œ„์น˜ ๋“ฑ์ด ์„ค์ •๋œ๋‹ค.
    cf. btn๊ณผ after img ์˜์—ญ์„ ๊ธฐ์ค€์œผ๋กœ ํšŒ์ƒ‰ ๋™๊ทธ๋ผ๋ฏธ์น ์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” before

button

button {
    background-color: rgba(0,0,0,0);
    display: inline-block;
}
  • ์›นํŽ˜์ด์ง€ ๋‚ด button์ด ์›Œ๋‚™ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํƒœ๊ทธ ์†์„ฑ์œผ๋กœ ๋„ฃ์–ด์ค€ ๊ฒƒ์„ ๋ณด๋ฉด, ๊ธฐ๋ณธ ์„ธํŒ…๊ฐ’์ด๋ผ๊ณ  ์—ฌ๊ธธ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
  • button์— inline-block์ด ์„ค์ •๋˜์—ˆ๋Š”๋ฐ before after ๊ฐ™์€ ๊ฐ€์ƒ์š”์†Œ ์„ ํƒ์ž๋Š” ํ•˜์œ„์š”์†Œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋–„๋ฌธ์— ๋”ฐ๋กœ block ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฑด๊ฐ€?

CSS animation

@keyframes ์š”์†Œ์— from-to ํ˜น์€ 0% ~ 100% ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์ž‘ ์ž‘์„ฑ.

ex.


.box {
	animation rotateBox 2s ease-in-out infinite;
}

@keyframes rotateBox {
	from {
    transform: rotate(0)
    } 
    to {
    transform: rotate(180deg)
    }
}

animation: name duration [timing-function] [delay interation-count] [direction] [fill-mode];

  • ํ•„์ˆ˜ ๊ธฐ์ž…: ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฆ„๊ณผ ์ง€์†๊ธฐ๊ฐ„

2์ฃผ์ฐจ ํšŒ๊ณ -1

  • ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ฑด ๋‚ด๊ฐ€ ์ง€๊ธˆ ๋ญ˜ ๋ชจ๋ฅด๊ณ  ์žˆ๋Š”์ง€์กฐ์ฐจ ๋ชฐ๋ผ์„œ ๊ฒ€์ƒ‰์„ ๋ชปํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์„ ์ œ๋Œ€๋กœ ๋ชปํ•  ๋•Œ ๊ฐ™๋‹ค.

  • ๋ฌด์—‡๋ณด๋‹ค ์ง€๊ธˆ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ๋งž๋Š” ๊ฑด์ง€ ๋ชจ๋ฅผ ๋•Œ! ๊ฐ€ ๊ฐ€์žฅ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๋“ฏํ•˜๋‹ค.
    - ์ผ๋‹จ ์ˆ˜์—… ์žˆ๋Š” ๋‚ ์—” ๊ฐ•์˜ ๋“ค์œผ๋ฉด์„œ ๋‚ด์šฉ ์ •๋ฆฌํ•˜๊ณ , ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์„ ๋งŒ์น˜ ๊ฐˆ๋ฌด๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๊ทธ์™ธ ์‹œ๊ฐ„์—” html+css ๊ด€๋ จ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ํ’€๊ณ , ๊ทธ๋ ‡๊ฒŒ ์•Œ๊ฒŒ ๋œ ์ ๊ณผ ์•„์‰ฌ์šด ์ ์„ ์„ž์–ด git์— ์˜ฌ๋ฆฌ๊ณ , ์ปดํ“จํ„ฐ ๊ตฌ์กฐ ๋„์„œ๋ฅผ ์ฐ”๋”์”ฉ ์ฝ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ .. ๊ทผ๋ฐ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ๋”ด ๊ธธ๋กœ ์ƒˆ์„œ ๋ฌธ์ œ๋‹ค. ๋œป๋ฐ–์˜ ๊ฒƒ์„ ํ•œ์ฐธ ๋ถ™๋“ค๊ณ  ํ•ด๊ฒฐํ•˜๋‹ค ๋ณด๋ฉด ์‹œ๊ฐ„์ด ๋‹ค ๊ฐ„๋‹ค ^^~

  • ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹์„ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ธฐ.

profile
์ผ๋‹จ ํ•ด๋ณด๋Š” ํŽธ
post-custom-banner

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