🍎 듀어가기에 μ•žμ„œ

이 글은 λͺ¨λ˜ 웹을 μœ„ν•œ HTML5+CSS3 바이블을 κ³΅λΆ€ν•˜λ©° κΈ°μ–΅ν•΄λ‘˜ λ‚΄μš©λ“€μ„ κ°„λ‹¨ν•˜κ²Œ κΈ°λ‘ν•œ κΈ€μž…λ‹ˆλ‹€. 책에 λŒ€ν•œ μžμ„Έν•œ 사항은 링크λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”. πŸ‘

πŸ“– 1. CSS3 μŠ€νƒ€μΌ 속성 κΈ°λ³Έ

CSS3 λ‹¨μœ„

크기 λ‹¨μœ„

em λ‹¨μœ„λŠ” 배수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ‹¨μœ„μž…λ‹ˆλ‹€. 1.5λ°° = 1.5em = 150% μž…λ‹ˆλ‹€.

* {
  font-size: 12px;
}
h1 {
  font-size: 3em;
}
h2 {
  font-size: 1.5em;
}
/* 
전체에 λŒ€ν•΄μ„œ `12px`,
h1에 λŒ€ν•΄μ„œ 3배인 `36px`,
h2λŠ” 1.5배인 `18px`이 μ μš©λ©λ‹ˆλ‹€.
*/

κ°€μ‹œ 속성

display 속성

inline-block은 마치 inline처럼 ν•œμ€„λ‘œ λ°°μΉ˜λ˜λ©΄μ„œ λ™μ‹œμ— block처럼 width, height, margin(μƒν•˜μ’Œμš°μ— λŒ€ν•΄μ„œ λͺ¨λ‘)을 κ°–μŠ΅λ‹ˆλ‹€.
🌡 inline은 λ”°λ‘œ width, height을 갖지 μ•Šκ³  margin에 λŒ€ν•΄μ„œλ„ 쒌우둜만 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

#box-frist {
  display: inline;
  background-color: red;
  width: 300px; /* μ μš©λ˜μ§€μ•ŠμŒ */
  height: 50px; /* μ μš©λ˜μ§€μ•ŠμŒ */
  margin: 10px; /* 쒌우둜만 적용 */
}

#box-second {
  display: inline-block;
  background-color: red;
  width: 300px;
  height: 50px;
  margin: 10px;
}

visibility 속성

hidden은 νƒœκ·Έλ₯Ό 보이지 μ•Šκ²Œ λ§Œλ“­λ‹ˆλ‹€. πŸš— 보이지 μ•Šκ²Œλ§Œ λ§Œλ“€ 뿐 κ·Έ μžλ¦¬μ— μ‘΄μž¬ν•©λ‹ˆλ‹€!(display: none;κ³ΌλŠ” λ‹€λ¦…λ‹ˆλ‹€.)

#box {
  visibility: hidden;
}

λ°•μŠ€ 속성

box-sizing 속성

width와 height 속성이 μ°¨μ§€ν•˜λŠ” λ²”μœ„λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

div {
  margin: 10px;
  padding: 10px;
  width: 100px;
  height: 100px;
  border: 10px solid black;
}
div:first-child {
  background: red;
  box-sizing: content-box;
}
div:last-child {
  background: orange;
  box-sizing: border-box;
}
  • content-box : contentλ₯Ό κΈ°μ€€μœΌλ‘œ width, height을 μ§€μ •ν•©λ‹ˆλ‹€. 즉, νƒœκ·Έκ°€ μ°¨μ§€ν•˜λŠ” 크기λ₯Ό κ΅¬ν•˜λ €λ©΄ padding, border, margin의 값을 2배둜 λ”ν•΄μ£Όμ–΄μ•Όν•©λ‹ˆλ‹€.(μ–‘μͺ½μ΄κΈ°λ•Œλ¬Έ)
  • border-box : borderλ₯Ό κΈ°μ€€μœΌλ‘œ width, height을 μ§€μ •ν•©λ‹ˆλ‹€. 즉, νƒœκ·Έκ°€ μ°¨μ§€ν•˜λŠ” 크기λ₯Ό κ΅¬ν•˜λ €λ©΄ margin의 κ°’λ§Œ 2배둜 더해주면 λ©λ‹ˆλ‹€.(λ§ˆμ°¬κ°€μ§€λ‘œ μ–‘μͺ½μ΄λ‹ˆκΉŒ)

λ°°κ²½ 속성

λ°°κ²½ 속성은 μ•„λž˜μ™€ 같이 예제만 두고 λ”°λ‘œ μ„€λͺ…은 ν•˜μ§€ μ•Šλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

body {
  background-color: white;
  background-image: url('BackgroundFront.png'), url('BackgroundBack.png');
  background-size: 100%;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-position: bottom;
}

κΈ€μž(폰트) 속성

line-height 속성

line-height 속성은 κΈ€μžμ˜ 높이λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 사싀상 κΈ€μžμ˜ 높이λ₯Ό μ§€μ •ν•˜λŠ” κΈ°λŠ₯보닀 κΈ€μžλ₯Ό 수직 쀑앙 μ •λ ¬ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

.box {
  width: 150px;
  height: 70px; /* κΈ€μžλ₯Ό κ°μ‹ΈλŠ” λ°•μŠ€μ˜ 높이 */
  background-color: #ff6a00;
  border: 10px solid #ffffff;
  border-radius: 30px;
  box-shadow: 5px 5px 5px #a9a9a9;
}
.box > a {
  display: block;
  line-height: 70px; /* κΈ€μžλ₯Ό κ°μ‹ΈλŠ” λ°•μŠ€μ˜ 높이와 같은 값을 μ„€μ •ν•˜λ©΄ 수직으둜 쀑앙 μ •λ ¬λ©λ‹ˆλ‹€. */
}

⭐ μΆ”κ°€λ‘œ spanκ³Ό 같은 inline ν˜•μ‹μ€ λ„ˆλΉ„κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ text-align: center;와 같은 속성을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.(μ• μ΄ˆμ— μ€‘μ•™μ΄λž€ κΈ°μ€€ μžμ²΄κ°€ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.)

μœ„μΉ˜ 속성

position 속성

  • μ ˆλŒ€ μœ„μΉ˜ μ’Œν‘œ : μš”μ†Œμ˜ Xμ’Œν‘œμ™€ Yμ’Œν‘œλ₯Ό μ„€μ •ν•˜μ—¬ μ ˆλŒ€μ μΈ μœ„μΉ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
    • absolute : μ ˆλŒ€ μœ„μΉ˜ μ’Œν‘œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
    • fixed : 화면을 κΈ°μ€€μœΌλ‘œ μ ˆλŒ€ μœ„μΉ˜ μ’Œν‘œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
  • μƒλŒ€ μœ„μΉ˜ μ’Œν‘œ : μš”μ†Œλ₯Ό μž…λ ₯ν•œ μˆœμ„œλ₯Ό 톡해 μƒλŒ€μ μΈ μœ„μΉ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
    • static : νƒœκ·Έκ°€ μœ„μ—μ„œ μ•„λž˜λ‘œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μˆœμ„œλŒ€λ‘œ λ°°μΉ˜λ©λ‹ˆλ‹€.
    • relative : 초기 μœ„μΉ˜ μƒνƒœ(효과λ₯Ό μ•ˆμ£Όλ©΄ μžˆμ„ μœ„μΉ˜)λ₯Ό κΈ°μ€€μœΌλ‘œ μƒν•˜μ’Œμš°λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

πŸ₯• λ‹¨μˆœνžˆ 생각해보면 μ ˆλŒ€ μœ„μΉ˜ μ’Œν‘œκ°€ 훨씬 μ‚¬μš©ν•˜κΈ° κ°„λ‹¨ν•©λ‹ˆλ‹€.(κ·Έμ € μ„€κ³„ν•˜λ“― μœ„μΉ˜λ₯Ό 숫자둜 지정해주면 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.)
🍈 ν•˜μ§€λ§Œ μš”μ¦˜μ—” 컴퓨터, ν…ŒλΈ”λ¦Ώ, 슀마트폰 λ“±λ“± λ‹€μ–‘ν•œ 해상도λ₯Ό 가진 λ””μŠ€ν”Œλ ˆμ΄κ°€ μ‘΄μž¬ν•˜λ―€λ‘œ μƒλŒ€ μœ„μΉ˜ μ’Œν‘œκ°€ 훨씬 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

z-index 속성

ν¬ν† μƒ΅μ—μ„œμ˜ λ ˆμ΄μ–΄ κ°œλ…μœΌλ‘œ μƒκ°ν•˜λ©΄ νŽΈν•©λ‹ˆλ‹€. 즉, μš°λ¦¬κ°€ λ°”λΌλ³΄λŠ” μ‹œμ„ μ— λŒ€ν•΄ 수직인(마치 쒅이λ₯Ό ν¬κ°œλ“―μ΄) μœ„μΉ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μˆ«μžκ°€ 클수둝 더 μœ„μͺ½(μœ μ €μ™€ κ°€κΉŒμš΄ μͺ½)에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

μœ„μΉ˜ 속성과 κ΄€λ ¨λœ 속성

1.μžμ†μ˜ position 속성에 absolute ν‚€μ›Œλ“œλ₯Ό μ μš©ν•˜λ©΄ λΆ€λͺ¨λŠ” height 속성을 μ‚¬μš©ν•©λ‹ˆλ‹€.

  • λΆ€λͺ¨ νƒœκ·Έκ°€ μ˜μ—­μ„ μ°¨μ§€ν•˜κ²Œ ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.

2. μžμ†μ˜ position 속성에 absolute ν‚€μ›Œλ“œλ₯Ό μ μš©ν•˜λ©΄ λΆ€λͺ¨μ˜ position 속성에 relative ν‚€μ›Œλ“œλ₯Ό μ μš©ν•©λ‹ˆλ‹€.

  • λΆ€λͺ¨ νƒœκ·Έλ₯Ό κΈ°μ€€μœΌλ‘œ μžμ† νƒœκ·Έκ°€ μ ˆλŒ€μ μΈ μœ„μΉ˜λ₯Ό κ°–κ²Œ ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.

overflow 속성

μžμ† ν˜Ήμ€ 후손 μš”μ†Œκ°€ λΆ€λͺ¨ μš”μ†Œμ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  λ•Œ 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€.

  • hidden : μ˜μ—­μ„ λ²—μ–΄λ‚˜λŠ” 뢀뢄을 보이지 μ•Šκ²Œ ν•©λ‹ˆλ‹€.
  • scroll : μ˜μ—­μ„ λ²—μ–΄λ‚˜λŠ” 뢀뢄을 μŠ€ν¬λ‘€ν•˜μ—¬ λ³Ό 수 있게 ν•©λ‹ˆλ‹€.

λΆ€λͺ¨ νƒœκ·Έμ— relative, μžμ† νƒœκ·Έμ— absoluteλ₯Ό μ μš©ν•˜μ—¬ μžμ† νƒœκ·Έκ°€ λΆ€λͺ¨ νƒœκ·Έμ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  λ•Œ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. μ›λž˜μ˜ λͺ©μ κ³Ό λ‹€λ₯΄κ²Œ float 속성과 ν•¨κ»˜ λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©λ˜λŠ” κ²½μš°κ°€ 더 λ§ŽμŠ΅λ‹ˆλ‹€.

float 속성

λΆ€μœ ν•˜λŠ” λŒ€μƒμ„ λ§Œλ“€ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€ λ•Œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” μŠ€νƒ€μΌ μ†μ„±μž…λ‹ˆλ‹€.

img {
  float: left;
}
/* νƒœκ·Έλ₯Ό μ™Όμͺ½μ— λΆ™μž…λ‹ˆλ‹€. */

float 속성을 μ‚¬μš©ν•œ λ ˆμ΄μ•„μ›ƒ ꡬ성 1(One True Layout 방식)

μžμ†μ— float 속성을 μ μš©ν•˜λ©΄ λΆ€λͺ¨μ˜ overflow 속성에 hidden ν‚€μ›Œλ“œλ₯Ό μ μš©ν•©λ‹ˆλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <title>CSS3 Property Basic</title>
    <style>
      /* body νƒœκ·Έλ₯Ό 쀑앙 μ •λ ¬ν•©λ‹ˆλ‹€. */
      body {
        width: 960px;
        margin: 0 auto;
      }
      #aside {
        width: 200px;
        float: left;
      }

      #section {
        width: 760px;
        float: left;
      }

      #wrap {
        overflow: hidden; /* #footer뢀뢄이 λ§¨μ•„λž˜ μœ„μΉ˜ν•˜κ²Œ ν•˜κΈ°μœ„ν•¨μž…λ‹ˆλ‹€. */
      }
    </style>
  </head>
  <body>
    <div id="header"><h1>Header</h1></div>
    <div id="navigation"><h1>Navigation</h1></div>
    <div id="wrap">
      <div id="aside">
        <h1>Aside</h1>
        <p>μ•ˆλ…•ν•˜μ„Έμš”.</p>
      </div>
      <div id="section">
        <h1>Section</h1>
        <p>λ°˜κ°‘μŠ΅λ‹ˆλ‹€.</p>
      </div>
    </div>
    <div id="footer"><h1>Footer</h1></div>
  </body>
</html>

float 속성을 μ‚¬μš©ν•œ λ ˆμ΄μ•„μ›ƒ ꡬ성 2(clear: both 이용)

<!DOCTYPE html>
<html>
  <head>
    <title>CSS3 Property Basic</title>
    <style>
      body {
        width: 960px;
        margin: 0 auto;
      }
      .clear {
        clear: both;
      }
      #aside {
        float: left;
        width: 260px;
      }
      #section {
        float: right;
        width: 700px;
      }
    </style>
  </head>
  <body>
    <div id="header"><h1>Header</h1></div>
    <div id="navigation"><h1>Navigation</h1></div>
    <div class="clear"></div>
    <!-- μ—¬κΈ°λŠ” 의미 μ—†μŠ΅λ‹ˆλ‹€. -->
    <div id="aside">
      <h1>Aside</h1>
      <p>μ•ˆλ…•ν•˜μ„Έμš”.</p>
    </div>
    <div id="section">
      <h1>Section</h1>
      <p>λ°˜κ°‘μŠ΅λ‹ˆλ‹€.</p>
    </div>
    <div class="clear"></div>
    <!-- float으둜 μ •λ ¬λœ #aide와 #section에 λŒ€ν•΄ κ·Έ μ•„λž˜λΆ€ν„°λŠ” λΆ€μœ ν•˜μ§€ μ•Šκ²Œ λ ˆμ΄μ•„μ›ƒμ„ μž‘μ•„μ€λ‹ˆλ‹€. -->
    <div id="footer"><h1>Footer</h1></div>
    <div class="clear"></div>
    <!-- μ—¬κΈ°λŠ” 의미 μ—†μŠ΅λ‹ˆλ‹€. -->
  </body>
</html>

벀더 ν”„λ¦¬ν”½μŠ€

속성듀 쀑 κ°„ν˜Ή -moz, -webkit 등이 μ•žμ— λΆ™λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이것이 벀더 ν”„λ¦¬ν”½μŠ€λ‘œ β€˜κ³΅κΈ‰ 업체 접두사’ μ •λ„λ‘œ μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
λ‹¨μˆœν•˜κ²Œ μƒκ°ν•˜λ©΄ μ›Ή λΈŒλΌμš°μ € 곡급 업체(ꡬ글, μ• ν”Œ λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ, λͺ¨μ§ˆλΌ λ“±λ“±)κ°€ μ‹€ν—˜μ μΈ κΈ°λŠ₯을 μ μš©ν•œ μ†μ„±λ“€μž…λ‹ˆλ‹€.

특히 -webkit이 자주 λ³΄μ΄λŠ”λ°, 웹킷은 μ• ν”Œμ—μ„œ κ°œλ°œν•˜κ³  μžˆλŠ” λ ˆμ΄μ•„μ›ƒ μ—”μ§„μž…λ‹ˆλ‹€. 이λ₯Ό 기반으둜 μ‚¬νŒŒλ¦¬, 크둬, 였페라 λ“±μ˜ μ—¬λŸ¬ μ›Ή λΈŒλΌμš°μ €κ°€ κ΅¬ν˜„λ˜μ—ˆκΈ° λ•Œλ¬Έμ— -webkit 벀더 ν”„λ¦¬ν”½μŠ€κ°€ 자주 λ³΄μ΄λŠ” 것 μž…λ‹ˆλ‹€. πŸ‘