웹개발 종합반 1주차 강의를 수강했다. 이번주엔 강의를 끊어서 듣다보니 내용흐름이 끊겨서 숙제하는데 조금 힘들었던 것 같다. HTML과 CSS의 기초와 JAVASCRIPT의 개요에 대해서 수업을 들었다.
파이썬도 공부해야하는데 강의를 듣다보니까 아직 초반인데 뒤죽박죽 될 것 같은 느낌이 들어서 강의에 집중해야 될 것 같다.
(1) HTML은 뼈대, CSS는 꾸미기!
(2) HTML 기초
HTML은 크게 Head와 Body로 구성된다. head 안에는 페이지의 속성정보를, body 안에는 페이지 내용 정보를 담는다.
(3) css 기초
head ~ /head 안에 style ~ /style로 공간을 만들어 작성한다. class를 가리킬 떄는 앞에 .을 붙이고 .myclass {} 로 써줘야한다.
배경관련
background-color
background-image
background-size
사이즈
width
height
폰트
font-size
font-weight
font-family
color
간격
margin
padding
기본적으로 쓰이는 것에는 이런 것들이 있다.
(4) 만들어둔 로그인 화면을 가운데로 가져오려면 : width를 주고 margin:auto를 사용하자
(5) 폰트입히기 : 구글 웹폰트 이용
(6) 주석처리하고싶은 라인들을 선택해서 ctrl + / 입력
(7) css 파일을 분리해서 저장해두었다가 쓸 수도 있다.
(8) 부트스트랩 활용하기!
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<title>스파르타코딩클럽 | 부트스트랩 연습하기</title>
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<style>
* {
font-family: 'Gowun Dodum', sans-serif;
}
.mytitle {
background-color : green;
height:250px;
width : 100%;
background-image : linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),url("https://movie-phinf.pstatic.net/20210715_95/1626338192428gTnJl_JPEG/movie_image.jpg");
background-position: center;
background-size:cover;
color : white;
display : flex;
flex-direction : column;
justify-content : center;
align-items: center;
}
.mytitle > button {
width : 200px;
height: 50px;
background-color: transparent;
color : white;
border-radius: 50px;
border : 1px solid white;
margin-top : 10px;
}
.mytitle > button:hover {
border : 2px solid white;
}
.mycomment {
color : gray;
}
.wrap {
max-width : 1200px;
width : 95%;
margin : 20px auto 0px auto
}
.mypost {
max-width : 500px;
width : 95%;
margin: 20px auto 0px auto;
box-shadow: 0px 0px 3px 0px;
padding : 20px;
}
.mybtn {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
margin-top : 20px;
}
.mybtn > button {
margin-right : 10px;
}
</style>
</head>
<body>
<div class="mytitle">
<h1>내 생애 최고의 영화들</h1>
<button>영화 기록하기⭐</button>
</div>
<div class = "mypost">
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
<label for="floatingInput">영화url</label>
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="inputGroupSelect01">별점</label>
<select class="form-select" id="inputGroupSelect01">
<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">
<textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea>
<label for="floatingTextarea">코멘트</label>
</div>
<div class = "mybtn">
<button type="button" class="btn btn-dark">기록하기</button>
<button type="button" class="btn btn-outline-dark">닫기</button>
</div>
</div>
<div class="wrap">
<div class="row row-cols-1 row-cols-md-4 g-4">
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">여기에 제목</h5>
<p class="card-text">여기엔 내용.</p>
<p>⭐⭐⭐</p>
<p class="mycomment">여기에 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">여기에 제목</h5>
<p class="card-text">여기엔 내용.</p>
<p>⭐⭐⭐</p>
<p class="mycomment">여기에 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">여기에 제목</h5>
<p class="card-text">여기엔 내용.</p>
<p>⭐⭐⭐</p>
<p class="mycomment">여기에 코멘트</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">여기에 제목</h5>
<p class="card-text">여기엔 내용.</p>
<p>⭐⭐⭐</p>
<p class="mycomment">여기에 코멘트</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
자바스크립트는 프로그래밍 언어 중 하나로, 브라우저가 알아들을 수 있는 언어이다. 파이썬, 자바 같은 언어를 써도 되지만 이미 만들어진 표준으로서 존재하는 언어이므로 브라우저에는 javacrip를 사용한다.
1) 어떻게 쓰이는지?
function hey() {
alert('안녕!');
}
라는 코드를 head안에 script 로 공간을 만들어 작성한다.
그리고, 버튼에 함수를 연결한다. 버튼을 누르면 함수가 불린다.
<button onclick="hey()">영화 기록하기</button>
2) 기초문법
(1) 리스트 : 순서를 지켜서 가지고 있는 형태
let a_list = [] // 리스트를 선언. 변수 이름은 역시 아무렇게나 가능!
// 또는,
let b_list = [1,2,'hey',3] // 로 선언 가능
b_list[1] // 2 를 출력
b_list[2] // 'hey'를 출력
// 리스트에 요소 넣기
b_list.push('헤이')
b_list // [1, 2, "hey", 3, "헤이"] 를 출력
// 리스트의 길이 구하기
b_list.length // 5를 출력
(2) 딕셔너리 : key-value의 묶음
let a_dict = {} // 딕셔너리 선언. 변수 이름은 역시 아무렇게나 가능!
// 또는,
let b_dict = {'name':'Bob','age':21} // 로 선언 가능
b_dict['name'] // 'Bob'을 출력
b_dict['age'] // 21을 출력
b_dict['height'] = 180 // 딕셔너리에 키:밸류 넣기
b_dict // {name: "Bob", age: 21, height: 180}을 출력
(3) 리스트와 딕셔너리의 조합
names = [{'name':'bob','age':20},{'name':'carry','age':38}]
// names[0]['name']의 값은? 'bob'
// names[1]['name']의 값은? 'carry'
new_name = {'name':'john','age':7}
names.push(new_name)
// names의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
// names[2]['name']의 값은? 'john'
(4) 함수
// 만들기
function 함수이름(필요한 변수들) {
내릴 명령들을 순차적으로 작성
}
// 사용하기
함수이름(필요한 변수들);
// 두 숫자를 입력받으면 더한 결과를 돌려주는 함수
function sum(num1, num2) {
console.log('숫자', num1, num2);
return num1 + num2;
}
sum(3, 5); // 8
sum(4, -1); // 3
(5) 조건문
function is_adult(age){
if(age > 20){
alert('성인이에요')
} else if (age > 10) {
alert('청소년이에요')
} else {
alert('10살 이하!')
}
}
is_adult(12)
(6) 반복문
for (let i = 0; i < 100; i++) {
console.log(i);
}
for (1. 시작조건; 2. 반복조건; 3. 더하기) {
4. 매번실행
}
1 -> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3
와 같은 순서로 실행됩니다.
i가 증가하다가 반복조건에 맞지 않으면, 반복을 종료하고 빠져나옵니다.
for (let i = 0 ; i < scores.length ; i++) {
if (scores[i]['score'] < 70) {
console.log(scores[i]['name']);
}
}
// 이렇게 하면 점수가 70점 미만인 사람들의 이름만 출력할 수도 있습니다.
이런 화면을 나 스스로 구성해야했는데 보자마자 순간 머리가 뒤죽박죽 혼란스러웠다. 하지만 코드를 외워서 쓰지 않고 미리 만들어둔 코드를 순서에 맞춰서 잘 짜면 되는 것이었기 떄문에 차근차근해보니 할만했다.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<title>헤이즈 팬명록</title>
<link href="https://fonts.googleapis.com/css2?family=Black+Han+Sans&family=Nanum+Brush+Script&family=Nanum+Myeongjo&family=Noto+Serif+KR:wght@200&display=swap" rel="stylesheet">
<style>
* {
font-family: 'Nanum Brush Script', cursive;
}
.mytitle {
height:250px;
width : 100%;
background-image : linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),url("http://newsimg.hankookilbo.com/2017/10/11/201710111154214799_1.jpg");
background-position: center;
background-size:cover;
color : white;
display : flex;
flex-direction : column;
justify-content : center;
align-items: center;
}
.mypost {
max-width : 500px;
width : 95%;
margin: 20px auto 0px auto;
box-shadow: 0px 0px 3px 0px;
padding : 20px;
}
.card {
max-width : 500px;
width : 95%;
margin : 20px auto 20px auto
}
.mybtn {
margin-top : 20px;
}
.mycards {
width : 95%
max-width : 500px;
margin : auto;
}
.mycards > .card {
margin-top : 10px;
margin-bottom : 10px;
}
</style>
</head>
<body>
<div class="mytitle">
<h1>헤이즈 팬명록</h1>
</div>
<div class="mypost">
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
<label for="floatingInput">닉네임</label>
</div>
<div class="form-floating">
<textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea>
<label for="floatingTextarea">응원댓글</label>
</div>
<div class="mybtn">
<button type="button" class="btn btn-dark">응원 남기기</button>
</div>
</div>
<div class="mycards">
<div class="card">
<div class="card-body">
<blockquote class="blockquote mb-0">
<p>새로운 앨범 멋져요!</p>
<footer class="blockquote-footer">호빵맨</footer>
</blockquote>
</div>
</div>
<div class="card">
<div class="card-body">
<blockquote class="blockquote mb-0">
<p>새로운 앨범 멋져요!</p>
<footer class="blockquote-footer">호빵맨</footer>
</blockquote>
</div>
</div>
<div class="card">
<div class="card-body">
<blockquote class="blockquote mb-0">
<p>새로운 앨범 멋져요!</p>
<footer class="blockquote-footer">호빵맨</footer>
</blockquote>
</div>
</div>
</div>
</body>
</html>
난 헤이즈의 노래를 좋아하기 떄문에 헤이즈 팬명록으로 만들어보았다. card를 mycards로 엮는게 막혔다 ㅠㅠ 여러개 card의 class가 card 라는 똑같은 이름으로 정의되면 안될 것 같다고 생각했기 때문이다. 숙제 해설 강의를 보고 mycards로 묶어서 각각 card라고 정의해도 괜찮다는 것을 확인하고, 적용해보았는데 깔끔하게 만들어졌다. 다만 폰트가 가독성이 좀 떨어지는 것 같다 ㅎㅎ
이렇게 1주차 수업이 끝났다. SQL에 비하면 뭔가 많은 내용이 휘몰아친 느낌이다.
다음주 수업이 기대가 되면서도 뭔가 두렵기도 하다 ㅎㅎ