๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/HTML | CSS

[DEVELUP] ๋นŒ๋ณด๋“œ์ฐจํŠธ ๋งŒ๋“ค๊ธฐ

by dar0m! 2019. 10. 17.

19/10/14 html๊ณผ css๋กœ ๋งŒ๋“ค์–ด๋ณด๋Š” ๋นŒ๋ณด๋“œ์ฐจํŠธ

์œ ํŠœ๋ธŒ ๋งํฌ ํ™˜๊ฒฝ์€ ๊ตฌ๋ฆ„IDE ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/develup-official/css-ep2-billie-board

ํ•ด๋‹น ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•˜๊ณ  html๊ณผ cssํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๋นŒ๋ณด๋“œ์ฐจํŠธ ์™„์„ฑ๋ชจ์Šต

๋นŒ๋ณด๋“œ์ฐจํŠธ ์™„์„ฑ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.




1. ๋ ˆ์ด์•„์›ƒ

๊ฐ€์žฅ ๋จผ์ € ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ์ž…๋‹ˆ๋‹ค.

์ดˆ์‹ฌ์ž์ผ ๋•Œ ์ผ ์ˆ˜๋ก ์ž‘์€ ๋ถ€๋ถ„์— ์ง‘์ฐฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ „์ฒด์ ์œผ๋กœ ๋ช‡ ๊ฐœ์˜ ๋ฉ์–ด๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์™„์„ฑ๋œ ๋นŒ๋ณด๋“œ์ฐจํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด ๋ฐ”๋”” ์•ˆ์— ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฉ์–ด๋ฆฌ๋Š” div ํƒœ๊ทธ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  class ๋ฅผ ๋‹ฌ์•„์ฃผ๋Š”๋ฐ ๋ณดํ†ต wrapper ๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•˜๊ณ  container๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

index.html

<div class="wrapper">
...
</div>

์ž˜ ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธ์„ ํ•  ๋•Œ๋Š” Open Preview๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.(๊ตฌ๋ฆ„ IDE) vscode ์—์„œ๋Š” extensions ์—์„œ open in browser ๋ฅผ ์„ค์น˜ํ•˜์‹œ๊ณ  Alt + B๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.


๋งŽ์€ ๋ถ„๋“ค์ด html markup์„ ๋‹ค ํ•˜๊ธฐ ์ „์—๋Š” css๋ฅผ ๊ฑฐ์˜ ํ•˜์ง€ ์•Š์œผ๋ คํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋งŒ html markup์„ ์ตœ์†Œํ•œ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  css๋ฅผ ์ตœ์†Œํ•œ์˜ ๋งˆํฌ์—… ๊ธฐ์ค€์—์„œ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ „์ฒด์ ์ธ ํ‹€์„ ์žก๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„ ๋” ์•ˆ์ •์ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

style.css

body{
    background-color: #333;
}
โ€‹
.wrapper{
    background-color: #999;
    width: 800px; // ๋„ˆ๋น„
    margin: 0 auto; // ๊ฐ€๋กœ๊ธฐ์ค€ ๊ฐ€์šด๋ฐ ์ •๋ ฌ(์ƒํ•˜๋‹จ 0, ์ขŒ์šฐ auto)
}


์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ์•ˆ์— ๋งˆํฌ์—…์„ ๋” ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํ…œํฌ๊ฐ€ ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์˜๋„์ ์ธ ๊ฒƒ์œผ๋กœ ์•ˆ์ •์„ฑ์„ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค.



2. ๋งˆํฌ์—…

์ œ๋ชฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

<div class="wrapper">
  <h1>
       BILLIEBOARD
  </h1>
</div>

์ฐจํŠธ์˜ ํ•ญ๋ชฉ๋“ค์€ 1, 2, 3, 4, ... ์ˆซ์ž๊ฐ€ ์•ž์— ๋ถ™์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€ ์ˆœ์ฐจ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ๋œป์œผ๋กœ ๋น„์Šทํ•œ ๊ฒƒ์€ ๋„ค์ด๋ฒ„ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ์ˆœ์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ฐจ์  ๋ฆฌ์ŠคํŠธ์ผ ๋•Œ๋Š” <ol>ํƒœ๊ทธ๋ฅผ ๋งŽ์ด ์”๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  class๋ฅผ chart์™€ chart-item ์œผ๋กœ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค.

<div class="wrapper">
<h1 class="title">BILLIEBOARD</h1>
  <ol class="chart">
      <li class="chart-item">Rank1</li>
      <li class="chart-item">Rank2</li>
      <li class="chart-item">Rank3</li>
  </ol>
</div>


์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋ฉด ์˜๋„์ ์œผ๋กœ ๋””์ž์ธ๋˜์ง€ ์•Š์€ ์—ฌ๋ฐฑ๋“ค์ด ๋ณด์ด๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํƒœ๊ทธ์— ๋”ฐ๋ฅธ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒˆ์ฐฝ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด ํ”„๋ฆฌ๋ทฐ๊ฐ€ ์ƒˆ ์ฐฝ์—์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ ๊ฒ€์‚ฌ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๋œจ๋ฉด์„œ ์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ctrl + Shift + I ๋‚˜ F12๋ฅผ ๋ˆŒ๋Ÿฌ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์‹ค์ œ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ๋งˆ์ง„์„ ์„ค์ •ํ•ด๋†“์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ๋งˆ์ง„์ด ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ช‡ ๊ฐœ์˜ ํƒœ๊ทธ์— ๊ธฐ๋ณธ์œผ๋กœ ์…‹ํŒ…์„ ํ•ด์ฃผ๋Š” user agent stylesheet๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์€ ์—†์• ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.



3-1. CSS : ์ „์ฒด์ ์ธ ํ‹€

์ œ๋ชฉ๊ณผ ๋ฆฌ์ŠคํŠธ์— margin๊ณผ padding์„ ์—†์• ๊ณ , list์— ๋ถ™์—ฌ์ง„ ์ˆซ์ž๋“ค์„ ์ง€์›๋‹ˆ๋‹ค. ์™„์„ฑ๋ชจ์Šต์—๋Š” ์ˆซ์ž๊ฐ€ ์žˆ์ง€๋งŒ list-style-type์œผ๋กœ ๋˜‘๊ฐ™์ด ๋งŒ๋“ค๊ธฐ ํž˜๋“  ๋ถ€๋ถ„์ด๋ฏ€๋กœ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฆฌ์ŠคํŠธ ์Šคํƒ€์ผ์€ ์—†์• ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ol, h1 {
    margin: 0;
    padding: 0;
}
โ€‹
li {
    list-style-type: none;
}


๊ตฌ์—ญํ™•์ธ์šฉ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋˜ wrapper์— background-color๋„ ์ง€์šฐ๊ณ  body์˜ ์ „๊ฒฝ์ƒ‰์„ ๋ฐ์€ ํšŒ์ƒ‰์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

.title {
    text-align: center;
    color: deeppink;
    font-size: 80px;
    letter-spacing: 0.2em;
    text-indent: 0.2em;
    padding: 50px 0;
}

letter-spacing ์†์„ฑ์œผ๋กœ ๊ธ€์ž๊ฐ„์˜ ๊ฐ„๊ฒฉ๋„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. em ์ด๋ž€ ํฐํŠธ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๋ก€ํ•˜๋Š” ํฌ๊ธฐ๋ฅผ ๋œปํ•˜๋Š”๋ฐ์š”, ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ๊ธ€์ž ํฌ๊ธฐ์ธ 80px์„ ๊ธฐ์ค€์œผ๋กœ 20%์— ํ•ด๋‹นํ•˜๋Š” ํฌ๊ธฐ๋งŒํผ letter spacing์„ ํ•˜๊ฒ ๋‹ค๋Š” ๋œป ์ž…๋‹ˆ๋‹ค.(๊ธ€์ž๊ฐ„ ๊ฐ„๊ฒฉ์„ ์ค๋‹ˆ๋‹ค.)

๊ทธ๋ƒฅ letter-spacing ๊นŒ์ง€๋งŒ ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ๊ธ€์ž๊นŒ์ง€๋„ letter-spacing์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž๋‹จ์— ๋“ค์—ฌ์“ฐ๊ธฐ(test-indent)์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒํ•˜๋‹จ padding ๊นŒ์ง€ ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



3-1. CSS : ordered list | ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ

์ด์ œ๋ถ€ํ„ฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

.chart {
    background-color: #aaa;
}
.chart-item {
    background-color: white;
    margin: 60px;
}

์•„๊นŒ๋ถ€ํ„ฐ background-color ๋ฅผ ์ฒ˜์Œ์— ์ฃผ๋Š” ๋ถ€๋ถ„์€ ์ฐจํŠธ๊ฐ€ ์–ผ๋งˆ๋งŒํผ์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฐจํŠธ์— ๊ฐ„๊ฒฉ๋“ค์„ ์ฃผ๊ธฐ์œ„ํ•ด์„œ margin์„ ์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์€ ๋ชจ์Šต์„ ๋ณด๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ์šฐ๋ฆฌ์˜ ์˜๋„์™€ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. css๋ฅผ ๋งŽ์ด ํ•ด๋ณธ ์‚ฌ๋žŒ์€ ๋นจ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ดˆ์‹ฌ์ž๋ผ๋ฉด ๋ชจ๋ฅด๋Š”... ์—ฌ๊ธฐ์—์„œ ๊ธฐ์ดˆ ์ง€์‹ํ•˜๋‚˜๋ฅผ ๊ผญ ์งš๊ณ  ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

ํฐ ๋ถ€๋ถ„๋“ค์€ list๋กœ block level element์ž…๋‹ˆ๋‹ค. ์ด๋“ค๋ผ๋ฆฌ๋Š” ์ƒํ•˜๋‹จ ๋งˆ์ง„์ด ๊ฒน์นœ๋‹ค. ๋˜๋Š” ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์€ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋””์ž์ธ์ธ๋ฐ ์ง€๊ธˆ์€ chart์™€ chart-item ์ด๋ผ๋Š” ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์—์„œ ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์ƒ์„ธ์„ค๋ช…์€ ์œ„์˜ ์œ ํŠœ๋ธŒ ๋งํฌ ๋™์˜์ƒ 35๋ถ„ ๋ถ€ํ„ฐ ํ™•์ธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋žตํžˆ ์š”์•ฝ์„ ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋ธ”๋ก๊ณผ ๋ธ”๋ก์‚ฌ์ด์˜ ์ƒํ•˜๋‹จ ๋งˆ์ง„์ด ๊ฒน์น˜๊ฒŒ๋” ํ•˜๋Š”๊ฑด ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋œ ๋ฐ”์ด๋‹ค. ์ž์—ฐ์Šค๋Ÿฌ์šด ๋””์ž์ธ. ํ•ฉ๋ฆฌ์ ์ด๋‹ค. 
โ€‹
๊ทธ๋Ÿฐ๋ฐ ๋งจ ์œ„์™€ ์•„๋ž˜๋„ ๊ฒน์นœ๋‹ค๋Š”๊ฒŒ ๋ฌธ์ œ์ธ๊ฒƒ์ด๋‹ค. wrapper์™€ box ์ฆ‰ ๋ถ€๋ชจ์™€ ์ž์‹๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ๋งˆ์ง„๊ฒน์นœํ˜„์ƒ์ด ์ผ์–ด๋‚˜๊ฒŒ๋œ๋‹ค. ์ปดํ“จํ„ฐ๋Š” ๋‹จ์ˆœํžˆ ์กฐ๊ฑด์— ์˜ํ•ด์„œ ์›€์ง์ด๋Š” ๊ฒƒ์ด๋‹ค. wrapper์€ ๋ถ€๋ชจ์ด๋ฉด์„œ block-level-element, box๋„ block-level-element. ์ธ์ ‘ํ•ด์žˆ๋Š” ์ƒ๋‹จ ๋งˆ์ง„, ์ธ์ ‘ํ•ด์žˆ๋Š” ํ•˜๋‹จ ๋งˆ์ง„. ๊ทธ๋ž˜์„œ ๋ถ€๋ชจ์™€ ์ž์‹๊ฐ„์—๋„ ์ƒํ•˜๋‹จ ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.


ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • border: ๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด์— border๋ผ๋Š” ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ๊ณ„๋ฉด์ด ์ƒ๊ธฐ๋‹ˆ๊นŒ ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์ด ํ•ด๊ฒฐ๋œ๋‹ค.

  • padding: ๋˜๋Š” ํŒจ๋”ฉ์„ 1px๋งŒ ์ค˜๋„ ํ•ด๊ฒฐ์ด ๋œ๋‹ค. ์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ€๋ชจ์™€ ์ž์‹ ์‚ฌ์ด์— ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ•˜๋‹จ ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

  • overflow: ํ•˜์ง€๋งŒ ๋ณด๋”๋‚˜ ํŒจ๋”ฉ์€ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์ผ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— overflow: hidden;์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ง€์ง€ ์•Š๊ณ  ๋งˆ์ง„๊ฒน์นจํ˜„์ƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด์ „ ์—ํ”ผ์†Œ๋“œ ์ฐธ๊ณ : ์œ ํŠœ๋ธŒ ์ด์ „ ๊ฐ•์˜)

๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

style.css

.chart {
  background-color: #aaa;
  overflow: hidden;
}


๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

style.css

.chart {
  background-color: #aaa;
  padding: 60px;
}
โ€‹
.chart-item {
  background-color: white;
  margin-bottom: 60px;
}
.chart-item:last-child {
  margin-bottom: 0;
}

๋‘˜ ๋‹ค ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



3-2: CSS : mouse over | ํฌ์ง€์…˜ ์†์„ฑ

์™„์„ฑ๋ณธ์„ ๋‹ค์‹œ ๋ณด๋ฉด ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ํ–ˆ์„ ๋•Œ ์š”์†Œ๋“ค์ด ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋ƒฅ ์ปค์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๊ณ  ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์€ ๊ฐ€๋งŒํžˆ ์žˆ๊ณ  ์ „์ฒด ํ‹€์ด ์ปค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์ ์ธ ๋ถ€๋ถ„๋“ค ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์ง€์‹์ด ํ•„์š”ํ•œ๋ฐ ๊ทธ ์ง€์‹์ด ๋ฐ”๋กœ position ์†์„ฑ์ž…๋‹ˆ๋‹ค.


์ž์„ธํ•˜๊ฒŒ ๊ฐ•์˜๊ฐ€ ํ•„์š”ํ•˜์‹  ๋ถ„๋“ค์€ ์œ ํŠœ๋ธŒ ์˜์ƒ 47๋ถ„ 30์ดˆ ๋ถ€ํ„ฐ ์‹œ์ฒญํ•˜์„ธ์š”.

์ฃผ์œ„ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๊ณ  ์œ„์น˜๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†์„ฑ์ด position relative ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋‹จ๋…์œผ๋กœ relative๋งŒ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ง‘์ค‘์ ์œผ๋กœ ์“ฐ๋Š” ์†์„ฑ์€ position absolute๋กœ ์ „์ฒด ์ฐฝ์„ ๊ธฐ์ค€์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ ์†์„ฑ์„ realative๋กœ ํ•˜๋ฉด '์ƒ๋Œ€์ ์ธ ์†์„ฑ์•ˆ์—์„œ ์ ˆ๋Œ€์ ์œผ๋กœ ๊ฐ€๋ผ.' ๊ฐ€ ๋˜์–ด ์ƒ๋Œ€์ ์ธ ์ ˆ๋Œ€์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ธฐ๋ณธ์ ์ธ ํŒจํ„ด์ด๋ฉด์„œ ๋งŽ์ด ์“ฐ๋ฏ€๋กœ ์ž˜ ์•Œ์•„๋‘๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. relative๊ฐ€ ์กฐ์ƒ์— ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ๋ฐ”๋กœ ์œ„์˜ ๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

02-position/02-position.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
       <title>02 Position</title>
       <link rel="stylesheet" href="02-position.css">
       <style>
           body {
               background-color: #ddd;
          }
           .grand-father {
               background-color: #eee;
               width: 800px;
               margin: 0 auto;
               padding: 1px;
          }
           .father {
               background-color: white;
               width: 300px;
               height: 200px;
               margin: 50px auto;
               position: relative;
          }
           .pos {
               background-color: orange;
                position: absolute;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                margin: 0;
                transition: margin .5s;
          }
        .pos:hover {
            margin: -30px;
          }
       </style>
</head>
<body>
โ€‹
       <div class="grand-father">
           <div class="father">
               <div class="pos">
POS
</div>
           </div>
       </div>
     
</body>
</html>
โ€‹

์ž์‹์˜ ํฌ์ง€์…˜์ด absolute์ด๊ณ  left:0; right:0; ์ด๋ฉด ์–‘์ชฝ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  top๊ณผ bottom๋„ 0์ด๋ผ๋ฉด ๋ถ€๋ชจ์˜ ํฌ๊ธฐ๋งŒํผ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ๋งˆ์ง„์„ negative๋งˆ์ง„์„ ์ฃผ๊ฒŒ๋˜๋ฉด ํ™•์žฅ๋˜๋Š”๋ฐ ์ด ์›๋ฆฌ๋ฅผ ๋”ฐ๋ผ์„œ hover๋  ๋•Œ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ๋งˆ์ง„์ด ๋˜๊ฒŒ๋” ํ•˜๋ฉด ์•ˆ์— ์ปจํ…์ธ ๋Š” ๊ฐ€๋งŒํžˆ ์žˆ๊ณ  ํ‹€๋งŒ ์ปค์ง€๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ transition: margin .5s; ์ด๋ ‡๊ฒŒ ์ฃผ๋ฉด 0.5์ดˆ๋™์•ˆ ๋งˆ์ง„ ์†์„ฑ์•ˆ์—์„œ ์ค‘๊ฐ„์น˜๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค.

02-position/02-position.html

.pos {
   background-color: orange;
   position: absolute;
   left: 0;
   right: 0;
   top: 0;
   bottom: 0;
   margin: 0;
   transition: all .5s;
   padding: 50px;
   border: 0px solid red;
โ€‹
}
.pos:hover {
   margin: -30px;
   border-radius: 20px;
   border: 10px solid red;
}

์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋ฉด ๋ชจ๋“  ์†์„ฑ๋“ค์— ๋Œ€ํ•ด์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


์›๋ž˜ ํ”„๋กœ์ ํŠธ๋กœ ๋Œ์•„๊ฐ€์„œ...

๊ทธ๋ž˜์„œ ์ •๋ฆฌํ•˜์ž๋ฉด ๋ถ€๋ชจ์ธ chart-item์„ position relative๋กœ ์ง€์ •ํ•ด๋‘๊ณ  chart-item ์•ˆ์— ๋“ค์–ด๊ฐˆ album์— ๋Œ€ํ•ด์„œ position absolute๋ฅผ ์ง€์ •ํ•ด๋‘์–ด hover ๋์„ ๋•Œ margin์— ๋งˆ์ด๋„ˆ์Šค๊ฐ’์„ ์ฃผ๊ฒŒ ๋˜๋ฉด ์ „์ฒด ํ‹€์ด ์ปค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

album์„ div๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

index.html

<!doctype html>
<html>
   <head>
<meta charset="utf-8">
       <title>BillieBoard</title>
       <link rel="stylesheet" href="style.css">
   </head>
   <body>

<div class="wrapper">
<h1 class="title">BILLIEBOARD</h1>
<ol class="chart">
<li class="chart-item">
<div class="album">
Album01
</div>
</li>

</ol>
</div>

       <script> </script>
   </body>
</html>

style.css

.chart-item {
    background-color: white;
    margin-bottom: 60px;
    position: relative;
}
โ€‹
.album {
    background-color: #999;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    transition: all .5s;
}
โ€‹
.album:hover {
    background-color: white;
    margin: -30px;
}




4. ๋ณธ๊ฒฉ์ ์ธ ์ฐจํŠธ ๊พธ๋ฏธ๊ธฐ

1,2,3,4,5 ๋Š” ์ผ๋‹จ.. ์ƒ๋žตํ•˜๊ณ ! ๊ฐ€์žฅ ํฐ ๋ ˆ์ด์•„์›ƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฒ„์ด๋ฏธ์ง€์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๋จผ์ € ๋„ฃ์–ด๋ณด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

index.html

<div class="album">
   <img class="album-cover" src="images/cover01.jpg">
   <div class="album-contents">
      ...
   </div>
</div>

์ด๋ฏธ์ง€๊ฐ€ ์ƒ๋‹จ์— ์žˆ๊ณ  ๋‚ด์šฉ๋“ค์ด ๋’ค๋”ฐ๋ผ์˜ค๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€์œ„์น˜๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ด๊ธฐ ์œ„ํ•ด์„œ 3-1์—์„œ ๋ฐฐ์šด๋‚ด์šฉ์„ ์ ์šฉ์‹œ์ผœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋Š” ์˜ค๋ฅธ์ชฝ์—, ์•จ๋ฒ” ์ปจํ…์ธ ๋Š” ์™ผ์ชฝ์— ์œ„์น˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

style.css

.album-cover {
  float: right;
  height: 100%; /*๋ถ€๋ชจ ํฌ๊ธฐ์˜ 100%*/
}
โ€‹
.album-contents {
  border: 5px solid red;
}


์ด๋ ‡๊ฒŒ ๋ณด๋ฉด border๊ฐ€ ์ด๋ฏธ์ง€์™€ ๊ฒน์น˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ overflow ์†์„ฑ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

style.css

.album-contents {
  border: 5px solid red;
  overflow: hidden;
  padding: 10px;
}

์ด์ œ ํŒจ๋”ฉ๊นŒ์ง€ ๋„ฃ์œผ๋ฉด ์ปจํ…์ธ ์™€ ์ปค๋ฒ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆ ์ง€๋ฉด์„œ๋„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.



์ „์ฒด์ ์ธ ํ‹€์„ ๊ฐ–์ท„์œผ๋‹ˆ ์„ธ๋ถ€์ ์ธ ๋งˆํฌ์—…์— ๋“ค์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



์„ธ๋ถ€์ ์ธ ๋งˆํฌ์—…

readme.md ์— ์ž‘์„ฑ๋˜์–ด์žˆ๋Š” ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ html์„ ๋งˆ์ € ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๋†’์ด๊ฐ€ ๊ต‰์žฅํžˆ ํฝ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ชจ์Šต์€ ์ดˆ๋ฐ˜์— ์–ธ๊ธ‰ํ–ˆ๋˜ user agent stylesheet ๋กœ h2์™€ pํƒœ๊ทธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ๋œ ์ƒํ•˜๋‹จ๋งˆ์ง„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์—†์• ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

style.css

ol, h1, h2, p {
  margin: 0;
  padding: 0;
}

์ด๋ ‡๊ฒŒ๋งŒ ํ•ด์ฃผ๋ฉด ์˜๋„๋Œ€๋กœ ๋˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  border๋ฅผ ์—†์• ๊ณ 

style.css

.album-contents {
  overflowhidden;
  padding10px;
}

index.html์—์„œ <li> ๋ถ€ํ„ฐ๋ฅผ 5๋ฒˆ ๋” ๋ถ™์—ฌ๋„ฃ์–ด ์ค๋‹ˆ๋‹ค.




5. sudo-element ๊ฐ€์ƒ ์š”์†Œ

ํƒ€์ดํ‹€์•„๋ž˜์— ๋ฐ‘์ค„์„ ๊ธ‹๋Š” ํ‘œํ˜„์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํƒ€์ดํ‹€์— ์ƒ๋Œ€์ ์ธ position์†์„ฑ์„ ์ฃผ๊ณ  ๊ฐ€์ƒ์š”์†Œ์ธ after์„ ์ด์šฉํ•˜์—ฌ ๊ณต๋ฐฑ์„ ์ฃผ๊ณ  left, right ๋ฅผ 0 ์œผ๋กœ ํ•˜์—ฌ ๋ฐ‘์ค„์ฒ˜๋Ÿผ ๋งŒ๋“  ํ›„ ๋งˆ์ง„์œผ๋กœ ๋†’์ด๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

++ left: 0; right:0; top: 0; bottom: 0; ๋Œ€์‹  width 100%, height 100%๋กœ ํ•˜๋Š” ๊ฑด ์™œ ์•ˆ๋˜๋ƒ๋ฉด, ๊ทธ ๋• ๋งˆ์ง„์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ผ์ด 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

style.css

.title {
    text-align: center;
    color: deeppink;
    font-size: 80px;
    letter-spacing: 0.2em;
    text-indent: 0.2em;
    padding: 50px 0;
    position: relative;
}
โ€‹
.title:after {
    content: ' ';
    background-color: bisque;
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 70px;
    bottom: 60px;
    border-radius: 10px;
    opacity: 0.2;
    height: 30px;
}

์œ„์—์„œ ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ์•จ๋ฒ”์— ๋ถ™๋Š” ์ˆซ์ž๋“ค๋„ ๊ฐ€์ƒ์š”์†Œ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•จ๋ฒ”๊ณผ, ์•จ๋ฒ” ์ปจํ…์ธ  ๋‘˜ ์ค‘ ์–ด๋Š ๊ณณ์—์„œ ๊ฐ€์ƒ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋“  ์ƒ๊ด€์—†์ง€๋งŒ, ์•จ๋ฒ”์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

style.css

.album:before {
    content: '1';
    font-size: 50px;
    padding: 5px;
    margin: 0 10px;
    width: 1em;
    text-align: right;
    font-weight: bold;
    font-style: italic;
    float: left;
}

float ๋Š” 'float๋ฅผ ์ฃผ๋ฉด ๋’ค ๋”ฐ๋ผ์˜ค๋Š”(์—ฌ๊ธฐ์„œ๋Š” ์•จ๋ฒ” ์ปจํ…์ธ )์™€ ์„ž์ธ๋‹ค.' ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.


์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€๋˜๊ฒŒ๋” ํ•˜๋ ค๋ฉด ๊ฐ€์ƒ์š”์†Œ์ค‘ ์‹ ๋ฐ•ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ์ธ chart๊ฐ€ <ol>, ์ž์‹์ธ chat-item ์ด <li> ์ด์ฃ  ์ด ๋•Œ, chart-item์—๊ฒŒ counter-increment๋ผ๋Š” ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์˜์˜ ํ…์ŠคํŠธ๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด๋‘๊ณ , ํ•„์š”ํ•œ ๊ณณ(์—ฌ๊ธฐ์„œ๋Š” album:before)์— ๊ฐ™์€ ์ด๋ฆ„์„ ์“ฐ๊ฒŒ ๋˜๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

style.css

.chart-item {
    background-color: white;
    margin: 60px;
    height: 80px;
    position: relative;
    counter-increment: rank;
}
โ€‹
.album:before {
    content: counter(rank);
    font-size: 50px;
    padding: 5px;
    margin: 0 10px;
    width: 1em;
    text-align: right;
    font-weight: bold;
    font-style: italic;
    float: left;
}

์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ <ol> ํƒœ๊ทธ ์•ˆ์—์„œ๋งŒ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ chart์—๋„ counter-reset ์„ ์ง€์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. counter-reset์„ ์ง€์ •ํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ ๊ณณ์—์„œ counter ์†์„ฑ์„ ์ผ์„ ๋•Œ 1๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

style.css

.chart {
    background-color: #aaa;
    overflow: hidden;
    counter-reset: rank;
}


๋งˆ์ง€๋ง‰! CD ๋Œ์•„๊ฐ€๋Š” ๋ถ€๋ถ„

cd ์ด๋ฏธ์ง€๋ฅผ ์•จ๋ฒ”์‚ฌ์ง„ ๋’ค์— ๋„ฃ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

<img class="album-cover" src="images/cover01.png">
<img class="albumm-disc" src="images/disc.png">
<div class="album-contents">
    <h2>Truth Hurts</h2>
    <p>Risso</p>
</div>

ใ…‹ใ…‹ใ…‹!! cd๊ฐ€ ๊ต‰์žฅํžˆ ํฝ๋‹ˆ๋‹ค. ์ด์ œ ์˜ฎ๊ธธ๊ฑด๋ฐ ์ด๊ฑด float๋กœ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ์ง€์™€ ์‹œ๋””๋Š” ๊ฐ™์€ ์„ ์ƒ์— ๊ฒน์น˜๊ฒŒ๋” ๋‘๋Š”๊ฒŒ ๋ชฉํ‘œ์ด๋ฏ€๋กœ..! ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋ฌด์กฐ๊ฑด ์•ฑ์†”๋ฃจํŠธ๋กœ ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

style.css

.album-disc {
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
}

์ด๋ ‡๊ฒŒํ•˜๋ฉด cd์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์ด์ œ ๋Œ์•„๊ฐ€๋Š” ๋ถ€๋ถ„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € @keyframe ์„ ํ™œ์šฉํ•˜์—ฌ ๋น™๊ธ€๋น™๊ธ€ ๋Œ์•„๊ฐ€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค๊ณ  album-disc์— ์ ์šฉ์‹œํ‚ต๋‹ˆ๋‹ค.

style.css

@keyframes spin {
    100% {
      transform: rotate(360deg);
    }
}
โ€‹
.album-disc {
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
    animation: spin .5s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
    transition: right .5s;
}

์ ์šฉ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  0.5์ดˆ๋™์•ˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ์•จ๋ฒ”์ด ๊ณ„์†ํ•ด์„œ ๋Œ์•„๊ฐ€๊ฒŒ๋” animation-iteration-count ์— ๋ฌดํ•œ๋Œ€ ๊ฐ’์„ ์ฃผ์—ˆ๊ณ , ๋Œ์•„๊ฐ€๋Š” ์†๋„๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ animation-timing-function์— linear ๋ผ๋Š” ๊ฐ’์„ ์คฌ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ๋””์Šคํฌ์™€ ์ด๋Ÿฌํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์•จ๋ฒ”์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ๋งŒ ๋“ฑ์žฅํ•˜๊ฒŒ๋” ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•จ๋ฒ”์ด hover๋์„ ๋‹น์‹œ ํ•˜์œ„์— ์žˆ๋Š” album-disc ์—๊ฒŒ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

style.css

.album-disc {
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
    animation: spin .5s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
    transition-delay: 1s;
    transition: right .5s;
}
โ€‹
.album:hover .album-disc {
    right: 70px;
}


๋˜ํ•œ ์•จ๋ฒ”์ด ๋„ˆ๋ฌด ๊ฐ‘์ž๊ธฐ ๋“ฑ์žฅํ•˜๋‹ˆ๊นŒ ์ฒœ์ฒœํžˆ ๋“ฑ์žฅํ•˜๊ฒŒ๋” transition ์†์„ฑ์„ album-disc์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋งˆ์šฐ์Šค ์˜ค๋ฒ„๋˜๊ณ ๋‚˜์„œ ๋””์Šคํฌ๊ฐ€ ๋“ฑ์žฅํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด์„œ album-disc์— transition-delay ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์˜ ๋ฌธ์ œ๋Š” ๋งˆ์šฐ์Šค๋ฅผ ์•จ๋ฒ”์œ„์— ๋‘์ง€ ์•Š์•˜์„ ๋•Œ, ์•„์›ƒ๋  ๋•Œ๋„ ๋”œ๋ ˆ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋งˆ์šฐ์Šค๋ฅผ ์•จ๋ฒ”์—์„œ๋ถ€ํ„ฐ ๋–ผ๋ฉด ๋ฐ”๋กœ cd๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ๋”transition-delay ๋ฅผ hover๋์„ ๋•Œ๋งŒ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

style.css

.album-disc {
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
    animation: spin .5s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
    transition: right .5s;
}
โ€‹
.album:hover .album-disc {
   right: 70px;
   transition-delay: 1s;
}



์ด์ œ ์•จ๋ฒ” ์„ค๋ช…๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์•จ๋ฒ” ๋‚ด์šฉ์„ ์ผ๋˜๊ฒƒ๊ณผ ๊ฐ™์ด readme.md ๋”๋ฏธ๋ฐ์ดํ„ฐ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜์—ฌ ๊ฐ€์ˆ˜ ์ด๋ฆ„ ์•„๋ž˜์— pํƒœ๊ทธ๋กœ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

index.html

<li class="chart-item">
    <div class="album">
        <img class="album-cover" src="images/cover01.png">
        <img class="album-disc" src="images/disc.png">
        <div class="album-contents">
            <h2>Truth Hurts</h2>
            <p>Risso</p>
            <p class="album-description">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.</p>
        </div>
    </div>
</li>


์•จ๋ฒ” ๋‚ด์šฉ์€ ๋งˆ์šฐ์Šค๊ฐ€ hover๋์„ ๋•Œ๋งŒ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•จ๋ฒ”์— overflow: hidden์†์„ฑ์œผ๋กœ ๋„˜์น˜๋Š” ๋‚ด์šฉ์„ ์•ˆ๋ณด์ด๋„๋ก ํ•˜๊ณ  margin-top์„ ์ค˜์„œ ๋‚ด์šฉ์„ ๋‚ด๋ ค ๊ฐ€๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

  • ํ™•์‹คํ•˜๊ฒŒ opacity ๋ฅผ 0์œผ๋กœ ํ–ˆ๋‹ค๊ฐ€ ์•จ๋ฒ”์— hover๊ฐ€ ๋์„ ๋‹น์‹œ์˜ album-description opacity๋ฅผ 1๋กœ ๋ฐ”๊พผ๋‹ค. ์ด ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด์„œ transition์„ ์ค€๋‹ค.

์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋‹ค ์จ๋ดค์Šต๋‹ˆ๋‹ค.

style.css

.album-description {
    margin-top: 10px;
    opacity: 0;
    transition: opacity .5s;
}
โ€‹
.album:hover .album-description {
    transition-delay: .5s;
    opacity: 1;
}

disc๊ฐ€ 1์ดˆ ๋’ค์— ๋‚˜ํƒ€๋‚˜๊ณ , ์„ค๋ช…์ด 0.5์ดˆ ๋’ค์— ๋‚˜ํƒ€๋‚˜๊ฒŒ album-description์—๋„ transition-delay๋ฅผ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.


์ถ”๊ฐ€๋กœ ์•จ๋ฒ”์ด hover๋์„ ๋‹น์‹œ ์ˆซ์ž์˜ ์ƒ‰๊น”์ด ๋ณ€ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์•จ๋ฒ”์ด hover ๋์„ ๋‹น์‹œ ๊ฐ€์ƒํด๋ž˜์Šค(:before)์˜ ์ƒ‰์ƒ์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

style.css

.album:hover:before {
    color: pink;
}


๋˜ํ•œ ์•จ๋ฒ”์ด ์ปค์งˆ ๋•Œ ๊ทธ๋ฆผ์ž๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

style.css

.album:hover {
    background-color: white;
    margin: -30px;
    box-shadow: 0 0 40px rgba(0,0,0,0.4);
}



์ด๋ ‡๊ฒŒ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ ๋‚˜๋ฉด ๋งจ ์œ„์— ์žˆ๋˜ ์™„์„ฑ๋ณธ๊ณผ ๊ฐ™์ด ๋ฉ‹์žˆ๊ฒŒ ์›€์ง์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.





์œ ํŠœ๋ธŒ์— ์ด์ „์— ์˜ฌ๋ผ์™”๋˜ ์˜์ƒ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ทธ๋ฆฌ๋“œ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์›Œ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..!

'๐Ÿ’Ž > HTML | CSS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CSS] nth-child ์™€ nth-of-type ์˜ ์ฐจ์ด์   (0) 2020.02.09

๋Œ“๊ธ€