이번주에 배웠던 내용들을 전체적으로 복습하는 느낌으로 진행하였습니다. 그리고 페어프로그래밍
이라는 형식으로 진행하였는데 두사람이 짝을 지어 번갈아 가며 네비게이터
와 드라이버
역할을 맡아 개발을 진행하였습니다.
네비게이터
: 개발을 안내하고 알려주고 자신의 생각을 주고받음
드라이버
: 네비게이터의 질문, 안내에 따라 코딩하고 자신의 생각을 주고받음
흔히 네비게이터
가 지시자고 드라이버
가 수행자라고 생각하기도 쉽고 또 처음하면 무의식적으로 비슷하게 행동하게 됩니다. 하지만 엄연히 수평적이고 잠깐잠깐 역할이 충분히 바뀔 수 있습니다.
이번에 처음하는 프로그래밍 방법이라 많이 어색하고 또 처음 뵙는 분과 할려니 굉장히 조심스러웠습니다.
목업에서 완성으로 만들기 위한 과정입니다.
<meta name="viewport" content="width=device-width, initial-scale=1" />
메타 태그입니다. 메타태그는 여러종류가 있으며 name
속성으로 어느 설정을 할건지 결정합니다.
name=viewport
는 뷰포트를 설정하며 어떻게 보일지를 지정합니다. 지정은 content
속성으로 세부사항을 결정합니다.
width=device-width
: 기기의 너비만큼 넓이를 가집니다.
initial-scale=1
: 초기 배율을 1로 원본입니다.
<!-- 여기에 HTML 구조를 작성하세요. 아래 코드는 예제이며, 얼마든지 바꿀 수 있습니다 -->
<div id="greeting">twittler</div>
div 태그입니다. id=greeting
으로 지정하여 해당 부분만 따로 수정합니다.
<!-- username, message, tweet!(button) 생성-->
<div id="input">
<div class="text">Username</div>
<input type="text" id="usernameInput"> </input>
<div class="text"> Message</div>
<textarea id="messageInput"></textarea> <br>
<button id="tweetButton"> Tweet!</button>
</div>
하늘색 박스가 id=input
div태그입니다. 아래에서 부터 순서대로 name, message, 버튼이 옵니다.
<!--check new tweets button-->
<div id="refresh">
<button id="randomButton">
<img width=10em height=10em src="https://cdn3.vectorstock.com/i/1000x1000/00/72/refresh-icon-vector-13490072.jpg"
</img>
check new tweets
</button>
</div>
보라색 박스 부분이 id=refresh
div태그입니다. 버튼이 하나 있는 부분입니다.
버튼에는 <img>
이미지 태그를 삽입하여 refresh
를 강조하였습니다.
<!-- Tweet lists -->
<section id="tweetlist" class="white"></section>
<script src="script.js"></script>
트위트 리스트입니다. 따로 건들일 필요 없었습니다.
#greeting {
font-size: 2em;
font-family: sans-serif;
font-weight: bold;
/* border: 2px solid #ccc; */
border-radius: 1em;
color: white;
/* background-color: #eee; */
text-shadow: 0 0 5px #333;
text-align: center;
margin: 0.5em;
padding: 0.5em;
}
최상단의 박스를 에서 테두리를 없애고 배경을 흰색으로 바꾸기 위해 해당 CSS속성들을 주석처리 하였습니다.
#input {
background-color: #46ccff;
padding: 0.5em;
margin-bottom: 0.5em;
}
.text {
margin-bottom: 0.5em;
color: white;
}
#usernameInput {
height: 2em;
margin-bottom: 0.5em;
}
#messageInput {
width: 80%;
height: 3em;
margin-bottom: 0.5em;
}
#tweetButton {
height: 3em;
width: 5em;
}
#input
: 여러 아이템들을 담는 컨테이너 입니다. 하늘색 배경, 내외부 여백을 수정하였습니다.
.text
: 텍스트 부분입니다. 색과 margin 수정하였습니다.
#usernameInput
: username을 입력받는 입력창입니다. 높이와 여백을 수정하였습니다.
#messageInput
: messgage를 입력받는 입력창입니다. 높이,너비, 여백을 수정하였습니다.
#tweetButton
: 트윗버튼입니다. 높이와 너비를 수정했습니다.
#refresh {
background-color: #3c467d;
height: 3em;
padding: 0.5em;
display: flex;
flex-direction: row;
align-items: center;
}
#randomButton {
height: 3em;
}
#refresh
: refresh버튼을 담는 컨테이너 입니다. 버튼을 세로로 중앙 정렬하기 위해 display:flex
, flex-direction:row
, align-items:center
를 이용하였습니다.
display:flex
: 부모를 flex 컨테이너로 사용합니다.
flex-direction:row
: 자식 요소를 좌에서 우로 정렬합니다.
align-items:center
: 자식 요소들을 수직으로 중앙에 배치 시킵니다.
#randomButton
: refresh버튼입니다.
#tweetlist {
background-color: #eeeeee;
padding-top: 1em;
overflow: auto;
}
.white {
border-bottom: 1px solid black;
}
#tweetWrapper {
list-style-type: none;
}
.tweet__username {
font-size: 1.2em;
font-weight: bold;
}
.tweet__createdAt {
float: right;
font-size: 0.8em;
}
.tweet__message {
font-size: 0.8em;
margin-top: 0.2em;
margin-bottom: 0.5em;
}
#tweetlist
: 트윗들을 담는 컨테이너 입니다. 배경색, 여백, 그리고 트윗들이 무한정 늘어나면 아래로 계속 추가될수 있도록 overflow:auto;
를 추가하였습니다.
.white
: <li>
태그입니다. 아래에 밑줄 효과를 내기 위해 아래쪽 경계선만 검은줄을 그었습니다.
#tweetWrapper
: <ul>
태그입니다.
list-style-type:none
를 입력하였습니다.tweet__username
, .tweet__createdAt
, tweet__message
는 순서대로 name, 시간, message입니다.
float:right
는 다소 생소할 수 있는데 block
요소 여백에 inline
요소를 위치시키는 태그입니다. right
속성은 block
을 오른쪽에 배치시키고 inline
요소를 왼쪽 여백에 채워 넣습니다.
사실 아직 부트캠프에선 배우지 않은 내용이지만, 이전에 잠깐 배웠던 기억과 페어분의 지식으로 채워넣었습니다.
tweetButton.onclick = function () {
if (usernameInput.value && messageInput.value) {
var today = new Date();
var year = today.getFullYear();
var month = ("0" + (today.getMonth() + 1)).slice(-2);
var day = ("0" + today.getDate()).slice(-2);
var dateString = year + "-" + month + "-" + day;
var hours = ("0" + today.getHours()).slice(-2);
var minutes = ("0" + today.getMinutes()).slice(-2);
var seconds = ("0" + today.getSeconds()).slice(-2);
var timeString = hours + ":" + minutes + ":" + seconds;
var now = dateString + " " + timeString;
const tweetObject = {};
tweetObject.user = usernameInput.value;
tweetObject.message = messageInput.value;
tweetObject.created_at = now;
...
}
};
이미 있던 트윗과 함께 새로 넣은 트윗들을 넣을 때 마다 시간도 함께 저장하고 싶다면 시간 정보도 그때그때마다 추가해서 넘겨 주어야 합니다.
var today = new Date();
시간 정보를 생성하고
var year = today.getFullYear();
var month = ("0" + (today.getMonth() + 1)).slice(-2);
var day = ("0" + today.getDate()).slice(-2);
var dateString = year + "-" + month + "-" + day;
var hours = ("0" + today.getHours()).slice(-2);
var minutes = ("0" + today.getMinutes()).slice(-2);
var seconds = ("0" + today.getSeconds()).slice(-2);
var timeString = hours + ":" + minutes + ":" + seconds;
var now = dateString + " " + timeString;
생성한 시간정보를 포맷에 맞추어야 합니다. month
는 0달부터 시작하므로 +1을 하여 양력 달에 맞춥니다.
최종적으로 now
에는 포맷에 맞춘 시간정보가 들어있습니다.
tweetObject.created_at = now;
시간정보를 객체에 함께 넣습니다. created_at
은 시간정보를 담는 변수입니다.
https://github.com/ds02168/twittler
HTML, CSS도 결코 쉬운건 아니지만 너무 어렵다고 생각하지말고 외우기 보단 익숙하고 그때그때 필요한것을 잘 검색할수 있도록 연습하는것이 중요한것 같습니다.