오늘은 부트 스트랩을 이용해서 넷플릭스의 킹덤 페이지를 유사하게 따라 만들어 봤다.
전체 소스 코드 :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>스파르타플릭스</title>
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<style>
* {
font-family: 'Gowun Dodum', sans-serif;
}
.main {
color: white;
background-position: center;
background-size: cover;
}
body {
background-color: black;
}
.mycards {
width: 1200px;
margin: 20px auto 20px auto;
}
.mypostingbox {
width: 500px;
margin: 20px auto 20px auto;
border: 1px solid white;
padding: 20px;
border-radius: 5px;
}
.form-floating>input {
background-color: transparent;
color: white;
}
.form-floating>label {
color: white;
}
.input-group>label {
background-color: transparent;
color: white;
}
.mypostingbox>button {
width: 100%;
}
</style>
</head>
<body>
<header class="p-3 text-bg-dark">
<div class="container">
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
<a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
<svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap">
<use xlink:href="#bootstrap"></use>
</svg>
</a>
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
<li><a href="#" class="nav-link px-2 text-danger">spartaflix</a></li>
<li><a href="#" class="nav-link px-2 text-white">홈</a></li>
<li><a href="#" class="nav-link px-2 text-white">시리즈</a></li>
<li><a href="#" class="nav-link px-2 text-white">영화</a></li>
<li><a href="#" class="nav-link px-2 text-white">내가 찜한 콘텐츠</a></li>
</ul>
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" role="search">
<input type="search" class="form-control form-control-dark text-bg-dark" placeholder="Search..."
aria-label="Search">
</form>
<div class="text-end">
<button type="button" class="btn btn-outline-light me-2">Login</button>
<button type="button" class="btn btn-danger">Sign-up</button>
</div>
</div>
</div>
</header>
<div class="main">
<div class="p-5 mb-4 bg-body-tertiary rounded-3">
<div class="container-fluid py-5">
<h1 class="display-5 fw-bold">킹덤</h1>
<p class="col-md-8 fs-4">병든 왕을 둘러싸고 흉흉한 소문이 떠돈다. 어둠에 뒤덮인 조선, 기이한 역병에 신음하는 산하. 정체 모를 악에 맞서 백성을 구원할 희망은 오직
세자뿐이다.</p>
<button type="button" class="btn btn-outline-light">영화 기록하기</button>
<button type="button" class="btn btn-outline-light">상세정보</button>
</div>
</div>
</div>
<div class="mypostingbox">
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="영화 이미지 주소">
<label for="floatingInput">영화 이미지 주소</label>
</div>
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="영화 제목">
<label for="floatingInput">영화 제목</label>
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="inputGroupSelect01">별점</label>
<select class="form-select">
<option selected>별점선택</option>
<option value="1">⭐</option>
<option value="2">⭐⭐</option>
<option value="3">⭐⭐⭐</option>
<option value="4">⭐⭐⭐⭐</option>
<option value="5">⭐⭐⭐⭐⭐</option>
</select>
</div>
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="추천 이유">
<label for="floatingInput">추천 이유</label>
</div>
<button type="button" class="btn btn-danger">기록하기</button>
</div>
<div class="mycards">
<div class="row row-cols-1 row-cols-md-4 g-4">
<div class="col">
<div class="card h-100">
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">영화 제목</h5>
<p class="card-text">⭐⭐⭐</p>
<p class="card-text">영화 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card h-100">
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">영화 제목</h5>
<p class="card-text">⭐⭐⭐</p>
<p class="card-text">영화 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card h-100">
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">영화 제목</h5>
<p class="card-text">⭐⭐⭐</p>
<p class="card-text">영화 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card h-100">
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">영화 제목</h5>
<p class="card-text">⭐⭐⭐</p>
<p class="card-text">영화 코멘트</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
HTML에 JavaScript 작성법
이후 Head 부분에 <script></script>를 작성하고 JavaScript를 작성한 후,
<script>
let a = '안녕하세요';
console.log(a);
</script>
F12(오른쪽 클릭 + 검사 클릭)에서 Console을 확인하면
"안녕하세요"가 Console에 출력된 걸 볼 수 있었다.
만약,
<script>
let a = 5;
let b = 8;
console.log(a+b);
</script>
로 수정할 경우,
JavaScript 처럼 a + b인 13이 출력 됐다.
리스트와 dictionary 또한 가능 했는데,
<script>
let a = ['사과', '배', '수박'];
console.log(a)
</script>
console.log(a[0]+", "+a[1]+", "+a[2])
<script>
let person =
{
'name' : "bap",
'age' : "30",
'height' : "180"
}
console.log(person['name']+", "+person['age']+", "+person['height'])
</script>
조건문과 반복문 또한,
<script>
let age = 15
if(age < 20) console.log("청소년 입니다")
else console.log('성인 입니다.')
</script>
<script>
let age = 15
for(let i = 0; i < age; i++)
{
console.log(i+', '+age)
}
</script>
정상적으로 잘 동작했다.
배열과 함께 사용하면,
<script>
let ages = [15,30,28,7,40,13]
ages.forEach((element)=>
{
console.log(element)
})
</script>
<script>
let ages = [15,30,28,7,40,13]
ages.forEach((element)=>
{
if(element > 15) console.log("성인 입니다")
else console.log("청소년 입니다.")
})
</script>
위와 같이도 사용이 가능하다
JavaScript로 함수 동작 시키기
이제 JavaScript를 활용해 Web page에 아래 동작을 넣어보면
<head>
<script>
function hey()
{
alert("안녕하세요")
}
</script>
</head>
<body>
<button type="button" class="btn btn-outline-light" onclick=hey()>영화 기록하기</button>
</body>
위와 같이 "안녕하세요"가 문구로 떳다.
(중요)JQuery를 사용한 html 조작법(중요)
JQuery를 head 사이에 추가해주고
<script>
function hey()
{
$('#title').text('쥬라기 월드')
}
</script>
Script 함수 내부에 $('#사용할 아이디').함수 및 사용할 위치에 id = '사용할 아이디'를 사용하면
<h1 id="title" class="display-5 fw-bold">킹덤</h1>
버튼 동작에 의해,
변경 전 모습
변경 후 모습
"영화 기록하기" 버튼 클릭에 따른 함수 호출로 "킹덤"이라는 단어가 "쥬라기 월드"로 변경된다.
좀 더 활용해보면
<script>
function checkResult()
{
let a = ['사과','배','감','귤']
$('#q1').text(a[0]+', '+a[1]+', '+a[2]+', '+a[3])
let b =
{
'name' : '영수',
'age' : 12
}
$('#q2').text(b['name']+', '+b['age'])
let c =
[
{'name' : '영수', 'age' : 13},
{'name' : '밥', 'age' : 30},
]
$('#q3').text(c[0]['name']+', '+c[0]['age']+' + '+c[1]['name']+', '+c[1]['age'])
}
</script>
<body>
<div class="top-part">
<h1>자바스크립트 문법 연습하기!</h1>
</div>
<hr/>
<br>
<h2>1. 함수</h2>
<div class="button-part">
<button onclick="checkResult()">결과 확인하기!</button>
</div>
<div class="list-part">
<h2>2. 리스트</h2>
<div id="q1"></div>
</div>
<div class="dict-part">
<h2>3. 딕셔너리</h2>
<div id="q2"></div>
</div>
<div>
<h2>4. 리스트 딕셔너리</h2>
<div id="q3"></div>
</div>
</body>
위와 같이 사용할 수 있었다.
(중요)JavaScript로 HTML 테그 추가 방법(중요)
<script>
function checkResult() {
$('#q1').empty();
let temp_html = `<p>감자</P>`;
$('#q1').append(temp_html);
}
</script>
위와 같이
let temp_html = `(1번 옆)<사용할 테그> 내용 </사용할 테그>`(1번 옆)
$('#q1').append(temp_html);
을 사용하면
기존 HTML
바뀐 화면
위와 같이 JavaScript로 HTML 테그를 추가할 수 있었다!!
`<사용할 테그> ${ 변경되는 변수 } </사용할테그>'
<script>
function checkResult()
{
$('#q1').empty();
let fruits = ['사과','배','감','귤','수박']
for(let index in fruits)
{
let temp_html = `<p>${fruits[index]}</P>`;
$('#q1').append(temp_html);
}
}
</script>
`<사용할 테그> ~~ </사용할 테그>`안에 ${ 변경되는 변수 }를 사용하면
변경 전 상태
변경 후 상태
위와 같이 index가 바뀌면서 리스트 안에 있는 값들을 모두 활용할 수 있다.
또한,
$('#q2').empty();
let people =
[
{'name':'서영','age':24},
{'name':'현아','age':30},
{'name':'영환','age':12},
{'name':'서연','age':15},
{'name':'지용','age':18},
{'name':'예지','age':36}
];
people.forEach(dict=>
{
let name = dict['name'];
let age = dict['age'];
let temp_html = `<p>${name}는 ${age}입니다</P>`;
$('#q2').append(temp_html);
})
코드를 추가하므로서
변경 전 모습
변경 후 모습
으로 리스트 안에 dictonary가 있는 경우도 변경할 수 있었다.