17. binding styles
내용
- 스타일 속성 바인딩에 대한 강의: 이 강의에서는 Vue에서 HTML 요소의 style 속성을 동적으로 바인딩하는 방법을 배웁니다.
- 직접 스타일 적용의 예시: 원의 크기를 변경하는 예를 들어, width, height, line-height 속성을 변경하는 방법을 설명합니다.
- 데이터 객체에 크기 속성 추가: size라는 데이터 속성을 생성하고 초기값을 150px로 설정합니다.
- 템플릿에 입력 필드 추가: 숫자 타입의 입력 필드를 추가하여 size 데이터 속성에 바인딩합니다.
- 스타일 동적 바인딩: style 속성을 객체로 바인딩하여 원의 width, height, line-height를 size 속성 값으로 설정합니다.
- 스타일 속성의 두 가지 표기법: 스타일 속성 이름에 대시(-)가 포함된 경우, 따옴표로 묶거나 카멜케이스(camelCase)로 작성할 수 있습니다.
- 배열 구문 사용: style 속성에 객체 대신 배열을 사용하여 여러 스타일을 적용하는 방법을 소개합니다.
- 계산된 속성으로의 리팩토링 제안: 코드의 복잡성을 줄이기 위해 계산된 속성을 사용하는 것을 추천합니다.
- 리소스 섹션의 추가 자료: 클래스와 스타일을 요소에 추가하는 방법에 대한 Vue 공식 문서 링크를 제공합니다.
index.html
<!DOCTYPE>
<html>
<head>
<title>VueJS Course</title>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<div id="app">
<label>
<input type="checkbox" v-model="isPurple" /> Purple
</label>
<select v-model="selectedColor">
<option value="">White</option>
<option value="text-black">Black</option>
<option value="text-orange">Orange</option>
</select>
<input type="number" v-model="size">
<div
class="circle"
:class="[selectedColor, circle_classes]"
:style="{
width: `${size}px`,
lineHeight: `${size}px`,
},"
>
Hi!
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.4.6/vue.global.prod.min.js"></script>
<script src="app.js"></script>
</body>
</html>
app.js
let vm = Vue.createApp({
data() {
return {
isPurple: false,
selectedColor: '',
size: 150,
}
},
computed: {
circle_classes() {
return {
purple: this.isPurple,
}
}
},
}).mount('#app')
main.css
body{
font-size: 20px;
font-family: sans-serif;
}
label{
margin-bottom: 20px;
font-size: 20px;
display: block;
}
select{
font-size: 20px;
margin-bottom: 20px;
}
input[type=number]{
display: block;
font-size: 20px;
margin-bottom: 20px;
}
.circle{
width: 150px;
height: 150px;
border-radius: 100%;
background-color: #45D619;
text-align: center;
color: #fff;
line-height: 150px;
font-size: 32px;
font-weight: bold;
}
.purple{
background-color: #767DEA;
}
.text-black{
color: #424242;
}
.text-orange{
color: #FFC26F;
}
index.html
<!DOCTYPE>
<html>
<head>
<title>VueJS Course</title>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<div id="app">
<label>
<input type="checkbox" v-model="isPurple" /> Purple
</label>
<select v-model="selectedColor">
<option value="">White</option>
<option value="text-black">Black</option>
<option value="text-orange">Orange</option>
</select>
<input type="number" v-model="size">
<div
class="circle"
:class="[selectedColor, circle_classes]"
:style="[
{
width: `${size}px`,
lineHeight: `${size}px`,
},
{
transform: 'rotate(30deg)',
},
]"
>
Hi!
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.4.6/vue.global.prod.min.js"></script>
<script src="app.js"></script>
</body>
</html>
app.js
let vm = Vue.createApp({
data() {
return {
isPurple: false,
selectedColor: '',
size: 150,
}
},
computed: {
circle_classes() {
return {
purple: this.isPurple,
}
}
},
}).mount('#app')
main.css
body{
font-size: 20px;
font-family: sans-serif;
}
label{
margin-bottom: 20px;
font-size: 20px;
display: block;
}
select{
font-size: 20px;
margin-bottom: 20px;
}
input[type=number]{
display: block;
font-size: 20px;
margin-bottom: 20px;
}
.circle{
width: 150px;
height: 150px;
border-radius: 100%;
background-color: #45D619;
text-align: center;
color: #fff;
line-height: 150px;
font-size: 32px;
font-weight: bold;
}
.purple{
background-color: #767DEA;
}
.text-black{
color: #424242;
}
.text-orange{
color: #FFC26F;
}