λͺ¨λ μΉμ μν HTML5+CSS3 λ°μ΄λΈ(11)
π λ€μ΄κ°κΈ°μ μμ
μ΄ κΈμ λͺ¨λ μΉμ μν HTML5+CSS3 λ°μ΄λΈ
μ 곡λΆνλ©° κΈ°μ΅ν΄λ λ΄μ©λ€μ κ°λ¨νκ² κΈ°λ‘ν κΈμ
λλ€.
μ±
μ λν μμΈν μ¬νμ λ§ν¬λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ. π
π 1. Appendix A - λΆνΈμ€νΈλ©
λΆνΈμ€νΈλ©μ νΈμμΉμμ μ 곡νλ μΉ νμ΄μ§ λμμΈ νλ μμν¬μ
λλ€. λΆνΈμ€νΈλ©μ μ¬μ©νμ¬ λ°μν μΉ νμ΄μ§λ₯Ό μ½κ³ λΉ λ₯΄κ² λ§λ€ μ μμ΅λλ€.
λΆνΈμ€νΈλ©μ 2κ°μ§ λ°©λ²μΌλ‘ μ 곡λ©λλ€.
- μλ°μ€ν¬λ¦½νΈμ μ€νμΌμνΈ νμΌμ λ€μ΄λ‘λν΄μ μ¬μ©
CDN(Content Delivery Network)μ μ¬μ©
κ°μ
μλμ μ½λλ₯Ό <head>
μ λ£μ΄μ€λλ€.
<!-- CSS only -->
<!-- π head νκ·Έμ λ‘λλ€. -->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx"
crossorigin="anonymous"
/>
<!-- JavaScript Bundle with Popper -->
<!-- π body νκ·Έ λμ λ‘λλ€. -->
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js"
integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa"
crossorigin="anonymous"
></script>
λ μ΄μμ
1. Fixed λ μ΄μμ
κ³ μ λ λλΉλ₯Ό μ¬μ©νλ λ μ΄μμμ λλ€. νλ©΄μ ν¬κΈ°λ₯Ό λ°κΏλ 컨ν μΈ μ ν¬κΈ°κ° λ³νμ§ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ classλ₯Ό βcontainerβλ‘ μ§μ ν΄μ£Όλ©΄ fixed λ μ΄μμμ΄ λ§λ€μ΄μ§λλ€.
λν, λΆνΈμ€νΈλ©μ κΈ°λ³Έ νλ©΄ λλΉλ 960pxμ΄κ³ λλΉκ° κ·Έ μλλ‘ μ€μ΄λ€λ©΄ λ°μν μΉ νμ΄μ§
λ‘ λμν©λλ€.
μ¬κΈ°μ μ μ (Fixed) vs λμ (Fluid)μ λ°μνμ λ€λ₯Έ κ°λ μ λλ€. λ°μνμ νΉμ νλ©΄ ν¬κΈ°μ λν΄μ λ€λ₯Έ λ μ΄μμμ κ°κ² ꡬμ±ν κ²μ λλ€. λ°μνμ λ°λλ μ μνμ λλ€.(μ°Έκ³ : ch 11)
<div class="container">
<h1>Lorem ipsum</h1>
</div>
2. Fluid λ μ΄μμ
νΉμ νλ©΄ ν¬κΈ°μ λ°λΌ λ μ΄μμ ν¬κΈ°κ° λ³νν©λλ€. νλ©΄μ ν¬κΈ°λ₯Ό λ°κΎΈλ©΄ 컨ν μΈ μ ν¬κΈ°κ° λ³ν©λλ€.
<div class="container-fluid">
<h1>Lorem ipsum</h1>
</div>
ν΄λ°
μΉ νμ΄μ§ μλ¨μ μμΉνλ κ΅¬μ± μμμ λλ€.
μΌλ°ν ν΄λ°
μ€ν¬λ‘€μ λ΄λ Έμ λ 보μ΄μ§ μλ ν΄λ°μ λλ€. κ·Έλ₯ μΌλ° divμ²λΌ μ€ν¬λ‘€ μ μλ‘ μ¬λΌκ°λλ€.
<div class="navbar navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="#">Bootstrap</a>
</div>
</div>
κ³ μ ν ν΄λ°
μ€ν¬λ‘€μ λ΄λ Έμ λ λ°λΌμ€λ ν΄λ°μ λλ€. μ¦, μλ¨μ κ³μ κ³ μ λμ΄μμ΅λλ€.
<!-- π fixed-top: κ³ μ ν ν΄λ°λ₯Ό λ§λλλ€.-->
<!-- π navbar-expand-lg: λ°μν ν΄λ°λ₯Ό λ§λλλ€.-->
<div class="navbar navbar-dark bg-dark fixed-top navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="#">Bootstrap</a>
</div>
</div>
μΌλ°μ μΌλ‘ ν΄λ°λ₯Ό μ μ©νλ©΄ ν΄λ°κ° 곡κ°μ μ°¨μ§νκ² λ©λλ€. λ°λΌμ μλμ κ°μ μ²λ¦¬λ₯Ό ν΄μ€λλ€.
body {
padding-top: 70px;
}
μΆκ°(ν΄λ° λ²νΌ)
<body>
<div class="navbar navbar-dark bg-dark fixed-top navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="#">Bootstrap</a>
<!-- π button νκ·Έμ data-target="#navbar-content"λ₯Ό ν΅ν΄
id="navbar-content"μΈ νκ·Έλ₯Ό λ²νΌμ ν΅ν΄ μ΄κ³ λ«μ λμμΌλ‘ μ§μ ν©λλ€. -->
<button
class="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbar-content"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar-content">
<!-- π mr-autoμ margin-autoμ μλ―Έλ‘ κ·Έ λ€μ ulμ λ€λ‘ λ°μ΄λ²λ¦¬κ² λ©λλ€. -->
<ul class="navbar-nav mr-auto">
<!-- π μμ: classμ dropdownμ μΆκ°νκ³ κ·Έ μλ ν κΈλ²νΌμ ν΅ν΄ λλ‘λ€μ΄ μμ΄ν
μ λ§λλλ€. -->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">HTML</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Geolocation</a>
<a class="dropdown-item" href="#">Drag and Drop</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Motion</a>
</div>
</li>
<!-- π λ: classμ dropdownμ μΆκ°νκ³ κ·Έ μλ ν κΈλ²νΌμ ν΅ν΄ λλ‘λ€μ΄ μμ΄ν
μ λ§λλλ€. -->
<li class="nav-item"><a class="nav-link" href="#">CSS3</a></li>
<li class="nav-item"><a class="nav-link" href="#">ECMAScript5</a></li>
<li class="nav-item"><a class="nav-link" href="#">Node.js</a></li>
<li class="nav-item"><a class="nav-link" href="#">API</a></li>
</ul>
<!-- π μ΄λ κ² μ
λ ₯ νμμ κ°λ¨νκ² λ§λ€ μ μμ΅λλ€. -->
<form class="form-inline">
<input type="text" class="form-control" placeholder="Search" />
</form>
<ul class="nav navbar-nav navbar-right">
<li class="nav-item"><a class="nav-link" href="#">Node.js</a></li>
<li class="nav-item"><a class="nav-link" href="#">API</a></li>
</ul>
</div>
</div>
</div>
<div class="container">
<h1>Jayden</h1>
<p>μλ
νμΈμ</p>
<p>λ°κ°μ΅λλ€</p>
<p>κ°λ°μ</p>
<p>νλ‘ νΈμλ</p>
<p>λ§μΈμ
λλ€</p>
</div>
</body>
π λΆνΈμ€νΈλ© μ 리
λΆνΈμ€νΈλ©μ μΉ νμ΄μ§ λμμΈ νλ μμν¬λ‘ κ°νΈνκ² μΉ νμ΄μ§λ₯Ό λ§λ€κΈ° μ’μ΅λλ€. λ€λ§, κ·Έλ§νΌ λ€μ 무κ²κ³ μ ννλ νμ΄μ§λ₯Ό λ§λ€μ΄λΈλ€λ λ¨μ λ μμ΅λλ€.
λΆνΈμ€νΈλ©μ κ·Έ λ΄μ©μ νλνλ μΈμ°κ³ νκΈ°λ³΄λ¨ λΆνΈμ€νΈλ© 곡μλ¬Έμλ₯Ό 보면μ νμν κΈ°λ₯λ€μ
ꡬννλ κ² μ’μ΅λλ€.
π 2. Appendix B - Less μ€νμΌμνΈ
μ€νμΌμνΈλ₯Ό λ μ½κ² μ¬μ©νκΈ° μν΄ λ€μν μ€νμΌμνΈ μμ§λ€μ΄ λ±μ₯νμ΅λλ€.
μ€νμΌμνΈ μμ§μ νΉμ ν ννμ μ€νμΌμνΈλ₯Ό CSS μ€νμΌμνΈλ‘ λ³κ²½ν΄μ£Όλ λ³ν μμ§μ»΄νμΌλ¬
μ
λλ€.
λνμ μΌλ‘ Sass μμ§κ³Ό Less μμ§μ΄ μμ΅λλ€.
κ°μ
Less 곡μ ννμ΄μ§μμ less.js
νμΌμ λ°μ΅λλ€.
μ΄μ΄μ html νμΌκ³Ό less νμ₯μλ₯Ό μ°λ νμΌμ μμ±ν΄μ€λλ€. κ·ΈλΌ μλμ κ°μ΄ νμΌμ΄ μ€λΉλ©λλ€.
- less-1.3.0.min.js(less ννμ΄μ§μμ λ°μ νμΌ) -> λ³ν μμ§ μν
- index.html
- LessStyleSheet.less(λ§μΉ style.cssμ²λΌ μ€νμΌμ μ μ νμΌμ λλ€.)
<head>
<title>Less StyleSheet Basic</title>
<link rel="stylesheet/less" type="text/css" href="LessStyleSheet.less" />
<script src="less-1.3.0.min.js"></script>
</head>
LessStyleSheet.less μμ μ λλ€.
// π javascriptμ κ°μ΄ `/` 2κ°λ‘ μ£Όμμ μΈ μ μμ΅λλ€.(μ€μ)
// π μ νμ λ΄λΆμ μ νμκ° μ‘΄μ¬ν©λλ€. μ‘°κΈ λ―μ€μ§λ§ ν¨μ¬ κ°λ
μ±μ΄ μ’μ κ±Έ μ μ μμ΅λλ€.
header {
width: 800px;
margin: 0 auto;
hgroup {
h1 {
color: red;
}
h2 {
color: blue;
}
}
nav {
ul {
overflow: hidden;
}
li {
float: left;
}
}
}
Less μ»΄νμΌλ¬
μμ ꡬμ±μ²λΌ λ³ν μμ§ μν μ νλ Less.js νμΌμ΄ νΈλ¦¬νκΈ΄ νμ§λ§, κ΅³μ΄ μ μ μκ²κΉμ§ μ λ¬νλ©΄μ νΈλν½μ λλΉν νμκ° μμ΅λλ€.
ν΄μ μ¨λΌμΈ Less μ»΄νμΌλ¬μμ less νμμ css νμμΌλ‘ λ°κΏμ κ°μ Έμ¬ μ μμ΅λλ€.(곡μ ννμ΄μ§μμλ κ°λ₯ν©λλ€.)
κΈ°λ³Έ
λ³μ
Less μ€νμΌμνΈλ λ³μλ₯Ό λ§λ€ μ μμ΅λλ€. λ³μλ @ κΈ°νΈλ₯Ό μ¬μ©νλ©° μ€νμΌμνΈμμ μ¬μ©νλ λͺ¨λ λ¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
@margin: 10px;
@padding: 10px;
@width: 200px;
div {
width: @width - (@padding * 2);
padding: @padding;
margin: @margin;
}
λ΄μ₯ μ νμ
μ νμ(A) λ΄λΆ μ νμ(B)κ° μμ λ, Aμ λ΄λΆμμ λ³ΈμΈμ κ°λ¦¬ν€λ μ νμκ° λ΄μ₯ μ νμ
μ΄κ³ &
λ‘ ννν©λλ€.
div {
background: black;
&:hover {
background: white;
}
a {
background: red;
color: white;
&:hover {
background: blue;
}
&:active {
background: green;
}
}
}
λ΄μ₯ ν¨μ
Less μ€νμΌμνΈμλ λ΄μ₯ ν¨μλ μμ΅λλ€. μ μ¬μ©νλ©΄ κ΅μ₯ν μ μ©νμ§λ§, μ¬κΈ°μμλ λ°λ‘ μ 리νμ§ μκ² μ΅λλ€. π΅
Less λ΄μ₯ ν¨μ 곡μλ¬Έμλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
λ―Ήμ€μΈ
κΈ°λ³Έμ μΈ λ΄μ₯ ν¨μλ μμ§λ§, μ°λ¦¬κ° μ§μ ν¨μλ₯Ό λ§λ€μ΄ μ¬μ©ν μλ μμ΅λλ€!(μ€λ§μ΄κ° π)
.μ΄λ¦(@λ³μ1, @λ³μ2, ...) {}
ννλ‘ ν¨μλ₯Ό λ§λ€μ΄ μ¬μ©ν©λλ€.
.linearGradient(@start, @end) {
background: @start;
background: -moz-linear-gradient(top, @start 0%, @end 100%);
background: -webkit-linear-gradient(top, @start 0%, @end 100%);
background: -o-linear-gradient(top, @start 0%, @end 100%);
background: -ms-linear-gradient(top, @start 0%, @end 100%);
background: linear-gradient(top, @start 0%, @end 100%);
}
.button(@width, @height, @radius) {
width: @width;
height: @height;
line-height: @height;
text-align: center;
border-radius: @radius;
}
* {
margin: 0;
padding: 0;
}
div {
margin: 10px;
float: left;
&:nth-child(1) {
.linearGradient(#0094ff, #004f89);
.button(200px, 100px, 10px);
}
&:nth-child(2) {
.linearGradient(#0094ff + #CC0000, #004f89 + #CC0000);
.button(200px, 100px, 10px);
}
&:nth-child(3) {
.linearGradient(#0094ff + #FF0000, #004f89 + #FF0000);
.button(200px, 100px, 10px);
}
}
λν, μλ£νμ νμΈνλ λ΄μ₯ν¨μλ₯Ό μ΄μ©νμ¬ μ£Όμ΄μ§ λ³μκ° μνλ μλ£νμΌ λλ§ ν¨μκ° μ€νλκ² ν μ μμ΅λλ€.
.linearGradient(@start, @end) when (iscolor(@start)) and (iscolor(@end)) {
background: @start;
background: -moz-linear-gradient(top, @start 0%, @end 100%);
background: -webkit-linear-gradient(top, @start 0%, @end 100%);
background: -o-linear-gradient(top, @start 0%, @end 100%);
background: -ms-linear-gradient(top, @start 0%, @end 100%);
background: linear-gradient(top, @start 0%, @end 100%);
}
.max (@a, @b) when (@a > @b) {
width: @a;
}
.max (@a, @b) when (@a < @b) {
width: @b;
}
.min (@a, @b) when (@a > @b) {
width: @b;
}
.min (@a, @b) when (@a < @b) {
width: @a;
}
π Less μ€νμΌμνΈ μ 리
κΈ°μ‘΄ CSSμ νλ‘κ·Έλλ° μΈμ΄κ°μ κΈ°λ₯λ€(λ³μ, λ΄μ₯ ν¨μ, λ―Ήμ€μΈ λ±)μ ν΅ν΄ ν¨μ¬ κ°νΈνκ³ κΉλν μ€νμΌμνΈλ₯Ό λ§λ€ μ μκ² ν΄μ€λλ€.
κ°μΈμ μΌλ‘ μ΄ μ±
μ μ½κ³ 곡λΆνλ©΄μ κ°μ₯ μ κΈ°νκ² κ³΅λΆν λ΄μ©μ΄μμ΅λλ€. π€©