일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- rust 기초
- ethers v6
- 스마트컨트렉트 함수이름 중복 호출
- 컨트렉트 배포 자동화
- ethers websocket
- 스마트컨트렉트 예약어 함수이름 중복
- Vue
- 체인의정석
- nest.js설명
- 스마트컨트렉트테스트
- ambiguous function description
- 티스토리챌린지
- 러스트 기초
- 러스트 기초 학습
- chainlink 설명
- ethers
- ethers typescript
- 프록시배포구조
- Vue.js
- SBT표준
- 컨트렉트 동일한 함수이름 호출
- ethers type
- vue기초
- git rebase
- 오블완
- 스마트컨트렉트프록시
- 스마트 컨트렉트 함수이름 중복
- 러스트기초
- multicall
- 머신러닝기초
- Today
- Total
체인의정석
Vue.js 클래스와 스타일 바인딩 본문
클래스와 스타일 바인딩
데이터 바인딩은 v-bind를 사용하여 엘리먼트의 클래스 목록과 인라인 스타일을 조작하기 위해 사용됩니다. vue는 class와 style에 v-bind를 사용할 때 특별히 향상된 기능을 제공하며 표현식은 문자열 이외에 객체 또는 배열을 이용할 수 있습니다.
HTML 클래스 바인딩하기
객체 구문
클래스를 동적으로 토글하기 위해 v-bind:class에 객체를 전달할 수 있습니다.
이런식으로 작성하게 되면 active 클래스의 존재 여부가 데이터 속성 isActive의 참속성에 의해 결정되는 것을 의미합니다.
객체에 필드가 더 있으면 여러 클래스를 토글 할 수 있습니다. 또한 v-bind:class는 일반 class 속성과 공존할 수 있습니다.
<div
class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>
따라서 위와 같이 클래스를 여러개 둘 수도 있으며 이 경우에 데이터는
data: {
isActive: true,
hasError: false
}
<div class="static active"></div>
이와 같이 랜더링 됩니다.
즉 데이터 값이 false인 경우 dom에서는 해당 클래스가 나타나지 않으며 true인 경우에만 class로 랜더링되게 됩니다.
또한 바인딩 된 객체는 인라인으로 html안에 들어가지 않더라도 다음과 같이 하나의 객체로 한번에 들어갈 수 있습니다.
<div v-bind:class="classObject"></div>
data: {
classObject: {
active: true,
'text-danger': false
}
}
또한 computed 속성도 바인딩이 가능합니다.
따라서 이를 이용하면 데이터와 바인드 한 것을 이용하여 클래스자체를 객체로 만들고 computed와 여러 클래스를 상황에 맞게 바꿔가며 작동하게 할 수 있습니다.
배열 구문
우리는 배열을 v-bind:class에 전달하여 클래스 목록을 지정할 수 있습니다.
<div v-bind:class="[activeClass, errorClass]"></div>
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
이와 같이 클래스 목록을 지정해 둔 후 배열을 만들게 되면
<div class="active text-danger"></div>
다음처럼 관리할 수 있고
조건부 토글하려면 삼항 연산자를 이용할 수 있습니다.
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
이 경우 항상 errorClass를 적용하고 isActive 가 true 일 때만 activeClass를 적용합니다.
<div v-bind:class="[{ active: isActive }, errorClass]"></div>
인라인 스타일 바인딩
v-bind : style 객체 구문
CSS처럼 보이지만 자바스크립트 객체
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
activeColor: 'red',
fontSize: 30
}
다음과 같이 style Object 객체로 만든 후 적용시킬 수도 있다.
<div v-bind:style="styleObject"></div>
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
배열 구문
<div v-bind:style="[baseStyles, overridingStyles]"></div>
다음과 같이 :style을 넣게 되면 같은 스타일의 엘리먼트에 여러개의 스타일 객체를 사용하게 할 수 있습니다.
다중 값 제공
<div v-bind:style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
정리하자면 다음과 같다.
- HTML클래스를 data 부분을 정의하여 바인딩 시키면 class를 바인딩 시켜서 바꿀 수 있다.
- 컴포넌트에서도 이것이 가능하다. < 컴포넌트 class = "추가하고자 하는 클래스"> </컴포넌트>이런식으로 작성하면 된다. :class를 해서 바인딩해도 동일하다.
- 인라인 스타일도 바인딩 시킬 수 있는데 이때 데이터 안에 스타일 객체를 만들고 거기에 style 요소들을 적은 후 객체를 바인딩 하면 간결하게 코드가 작성된다.
- 스타일을 바인딩 시킬때 배열 및 다중값으로 받아와서 여러 스타일을 적용시킬 수도 있다.
'개발 > frontend' 카테고리의 다른 글
vue router (0) | 2020.06.24 |
---|---|
Vue.js를 사용하기 위해 기본적으로 필요한 모듈들 사이트와 역할 및 링크 모음 (0) | 2020.06.23 |
Vue.js computed와 watch (0) | 2020.06.19 |
Vue.js 템플릿 문법 (0) | 2020.06.18 |
Vue 인스턴스 (0) | 2020.06.18 |