1. 기본 레이아웃

<!DOCTYPE html>
<html>
<head>
<!-- 모바일 기기의 접속 시 화면 크기 조절을 위해 뷰포트 설정 -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<!-- vuetify.js에 필요한 스타일 파일 링크 연결 -->
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<!-- 첫 화면의 시작은 v-app 엘리먼트 사용 -->
<v-app>
<!-- 상단 부분은 v-app-bar 엘리먼트 사용 -->
<v-app-bar app>
<v-app-bar-nav-icon></v-app-bar-nav-icon>
<v-toolbar-title>Header입니다.</v-toolbar-title>
</v-app-bar>
<!-- 콘텐츠 부분은 v-content 엘리먼트 사용 -->
<v-content>
안녕하세요
<v-container>Contents입니다.</v-container>
</v-content>
<!-- 하단 부분은 v-footer 엘리먼트 사용 -->
<v-footer>
<div>Footer입니다.</div>
</v-footer>
</v-app>
</div>
<!-- 필요한 Vue.js와 Vuetify.js의 자바스크립트 연결 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify()
})
</script>
</body>
</html>
2.기본레이아웃 2

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<v-app>
<!-- 앱바색상을 primary(파랑색)로 설정하고 fixed로 위치 고정 -->
<v-app-bar app color="primary" dark fixed>
<!-- 좌측에 메뉴 아이콘 넣음 -->
<v-app-bar-nav-icon></v-app-bar-nav-icon>
<v-toolbar-title>마스터 페이지</v-toolbar-title>
<!-- 우측에 추가메뉴 아이콘을 넣기 위해 v-spacer 엘리먼트 사용 -->
<v-spacer></v-spacer>
<v-btn icon>
<v-icon>mdi-dots-vertical</v-icon>
</v-btn>
</v-app-bar>
<!-- <v-app-bar app color="primary" dark fixed>
</v-app-bar>
-->
<v-content>
<v-container>
<!-- display-1/3, body-1/2 타이포그래피 서체 종류와 크기로 설정 -->
<h1 class="display-1 my-5">안녕하세요</h1>
<!-- my-4로 상하 안쪽여백 설정 -->
<p class="body-2 my-4">마스터 페이지입니다.</p>
<v-divider></v-divider>
<h1 class="display-3 my-4">안녕하세요</h1>
<p class="body-1 my-4">마스터 페이지입니다.</p>
</v-container>
</v-content>
<!-- footer 색상을 secondary로 설정하고 fixed로 위치를 고정시킴 -->
<v-footer color="secondary" dark fixed>
<!-- mx-auto는 블럭레벨 엘리먼트의 내용을 가운데 정렬시킴 -->
<div class="mx-auto">Copyright ©</div>
</v-footer>
</v-app>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify()
})
</script>
</body>
</html>
3.카드 UI 만들기

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<v-app>
<v-content>
<v-container>
<!-- 카드 UI 사용을 선언하는 v-card 엘리먼트 -->
<v-card max-width="400">
<!-- 카드 상단에 이미지를 배치시킴 -->
<v-img src="https://picsum.photos/id/1068/400/300" aspect-ratio="2.3"></v-img>
<!-- 카드 중간에 텍스트를 배치시킴 -->
<v-card-text>
<div>
<!-- 제목의 타이포그래피 스타일을 title으로 설정-->
<!-- 하단의 margin 크기값을 1로 설정-->
<h2 class="title primary--text mb-2">시대정신 선도</h2>
버추얼 컴퍼니에 관심을 가져 주셔서 감사합니다. 버추얼 컴퍼니는 오랜 역사를 지니며 그동안 많은 발전을 하였습니다.
</div>
</v-card-text>
<!-- 카드 하단에 버튼을 배치시킴 -->
<v-card-actions>
<!-- 버튼색상은 붉은색으로 설정 -->
<v-btn color="red white--text">확인</v-btn>
<!-- outline으로 버튼의 배경색을 없앰 -->
<v-btn outlined color="red" >취소</v-btn>
<v-btn color="#9C27B0" dark>취소</v-btn>
</v-card-actions>
</v-card>
</v-container>
</v-content>
</v-app>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify()
})
</script>
</body>
</html>
4.그리드 기본 원리


<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
<style>
/* 테두리를 볼 수 있도록 그리드 스타일 설정 */
.border_style {
border-color: rgb(5, 121, 30);
/* 초록색 */
border-width: 1px;
border-style: solid;
background-color: rgb(153, 204, 14);
/* 연한 초록색 */
}
</style>
</head>
<body>
<div id="app">
<v-app>
<v-content>
<v-container>
<!-- 한 행은 12개의 열이 기준 -->
<v-row text-center>
<v-col cols="12" class="border_style">xs12</v-col>
<v-col cols="6" class="border_style">xs6</v-col>
<v-col cols="3" class="border_style">xs3</v-col>
<!-- 현재 열의 개수가 9개인데 열 4개를 추가하면 12를 초과하므로 자동 줄바꿈됨 -->
<v-col cols="4" class="border_style">xs4</v-col>
<!-- 총 12개의 열을 추가함. 8개 열을 채운 후 4개의 열은 자동으로 줄바꿈 됨 -->
<v-col cols="1" v-for="item in 12" v-bind:key="item.id" class="border_style">xs1</v-col>
</v-row>
<br>
<!-- 총 20개 생성함. 열의 개수가 12개를 넘으면 자동으로 줄 바꿈 -->
<v-row text-center>
<v-col cols="1" v-for="item in 20" v-bind:key="item.id" class="border_style">xs1</v-col>
</v-row>
</v-container>
<v-container fluid>
<v-row text-center>
<v-col sm="4" class="border_style">sm4</v-col>
<!-- offset으로 그리드 사이에 4개의 열 간격을 띄움 -->
<v-col sm="4" offset-sm="4" class="border_style">4</v-col>
</v-row>
</v-container>
</v-content>
</v-app>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify()
})
</script>
</body>
</html>
5.반응형 그리드


<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<v-app>
<!-- 앱바를 이용하여 헤더 제목을 작성합니다.-->
<v-app-bar app flat color="primary">
<v-toolbar-title class="white--text mx-auto">Beetle 운동화</v-toolbar-title>
</v-app-bar>
<v-content>
<v-container>
<v-row>
<!-- 첫번째 열의 반응형 크기를 지정합니다.
1) xs의 경우 : 12개의 열을 사용하여 한 행을 모두 차지
2) sm의 경우 : 6개의 열을 사용하여 절반 너비를 차지
-->
<v-col cols="12" sm="6">
<h2 class="mb-3">About Beetle</h2>
<p>운동화는 나를 표현하는 하나의 방법이자 패션을 완성하는 필수 아이템이다. 운동화 대표 브랜드 Beetle은 편안한 발 패션으로 많은 사랑을 받고
있다.</p>
</v-col>
<!-- 두번째 열의 반응형 크기를 지정합니다.
1) xs의 경우 : 12개의 열을 사용하여 한 행을 모두 차지
2) sm의 경우 : 6개의 열을 사용하여 절반 너비를 차지
-->
<v-col cols="12" sm="6">
<h2 class="mb-3">Beetle's Target</h2>
<p>1.운동화에 관심있는 사람은 누구나</p>
<p>2.스니커즈를 사고 싶은 사람</p>
<p>3.차별화된 디자인을 원하는 사람</p>
<p>4.최신 트렌드의 운동화를 원하는 사람</p>
</v-col>
</v-row>
</v-container>
</v-content>
<!-- Footer를 작성합니다. -->
<v-footer color="primary" dark>
<!-- 올해 년도를 자동으로 생성하여 저작권 표시문구 렌더링함 -->
<div class="mx-auto">Copyright © {{ new Date().getFullYear() }}</div>
</v-footer>
</v-app>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify()
})
</script>
</body>
</html>
6.리스트와 아이콘 사용법

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<v-app>
<v-app-bar app color="blue" dark>
<!-- 좌측에 메뉴 아이콘 넣음 -->
<v-app-bar-nav-icon></v-app-bar-nav-icon>
<v-toolbar-title>Virtual Company</v-toolbar-title>
</v-app-bar>
<v-content>
<v-container>
<v-card>
<v-list two-line v-for="item in aList" v-bind:key="item.id">
<!-- 항목을 하나씩 가져와서 item 단위로 표시함 -->
<v-list-item @click="">
<!-- 좌측에 대표 아이콘을 먼저 표시함 -->
<v-list-item-avatar>
<v-icon :class="[item.icon_style]">{{ item.icon_name }}</v-icon>
</v-list-item-avatar>
<!-- 제목을 렌더링함 -->
<v-list-item-content>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item-content>
<!-- 우측에 화살표 아이콘을 넣음 -->
<v-list-item-action>
<v-btn icon>
<v-icon color="grey">keyboard_arrow_right</v-icon>
</v-btn>
</v-list-item-action>
</v-list-item>
</v-list>
</v-card>
</v-container>
</v-content>
</v-app>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data() {
return {
// 반복되는 항목들은 JSON 배열 데이터로 만들어 반환함
aList: [{
icon_name: 'account_balance',
icon_style: 'red white--text',
title: '회사 소개',
},
{
icon_name: 'photo',
icon_style: 'green white--text',
title: '제품 이미지',
},
{
divider: false,
icon_name: 'movie',
icon_style: 'yellow white--text',
title: '홍보 동영상',
}
]
}
}
})
</script>
</body>
</html>
7.플로팅 버튼 UI 컴포넌트 넣기

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@3.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id="app">
<v-app>
<v-app-bar app color="blue" dark>
<!-- 좌측에 메뉴 아이콘 넣음 -->
<v-app-bar-nav-icon></v-app-bar-nav-icon>
<v-toolbar-title>Virtual Company</v-toolbar-title>
</v-app-bar>
</v-app>
<v-card>
<v-card-text style="height: 50px; position: relative;">
<v-btn absolute dark fab top right color="pink">
<v-icon>add</v-icon>
</v-btn>
</v-card-text>
</v-card>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.2.x/dist/vuetify.js"></script>
<script>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data() {
return {
// 반복되는 항목들은 JSON 배열 데이터로 만들어 반환함
aList: [{
icon_name: 'account_balance',
icon_style: 'red white--text',
title: '회사 소개',
},
{
icon_name: 'photo',
icon_style: 'green white--text',
title: '제품 이미지',
},
{
divider: false,
icon_name: 'movie',
icon_style: 'yellow white--text',
title: '홍보 동영상',
}
]
}
}
})
</script>
</body>
</html>
출처 :
Do it! 프로그레시브 웹앱 만들기
반응형 웹 개발부터 하이브리드 앱 배포까지 PWA 완전 정복!
김응석 저자(글)
이지스퍼블리싱 · 2020년 08월 06일
8.5(7개의 리뷰)
도움돼요(50%의 구매자)
https://product.kyobobook.co.kr/detail/S000001817978
















댓글 ( 4)
댓글 남기기