바닐라JS로 간단한 웹앱만들기
-노마드코더 JS강의를 통해 간단한 웹앱의 기능은 다 구현하였으나, CSS를 혼자먹여야해서 오늘은 4시간동안 CSS적용을 함.
-github : https://github.com/jake6677/nomadcoder-JSapp/tree/main/NomadCoderJS
-css 코드 및 몰랐던 것들 정리
html {
color : white;
text-align: center;
}
.hidden {
display : none;
}
//img태그를 background에 지정한 코드. position을 fixed하고 z-index를 -1로 둬서 배경처럼 사용함.
#background {
position : fixed;
z-index: -1;
top : 0;
left : 0;
min-width : 100%;
max-width : 100%;
object-fit: cover;
width : 100%;
height: 100%;
}
#weather {
margin-bottom: 80px;
text-align: right;
}
h2#days {
font-size : 16px;
margin-top: 5px;
margin-bottom: 0px;
}
h2#clock {
font-size : 43px;
margin-top: 0px;
font-size: 43px;
margin-bottom: 30px;
word-spacing: -5px;
}
h1#greeting {
font-size : 50px;
margin-top: 0px;
margin-bottom: 10px;
}
#login-form{
color : white;
}
#login-form #login-text {
margin-bottom : 80px;
font-size : 30px;
height: 50px;
width: 600px;
color : white;
background-color : transparent; //이 속성을 통해 배경을 투명하게 할 수 있음
text-align: center;
outline : none;
border : 0px;
border-bottom : 2px solid white;
}
#login-form #login-text::placeholder{
color : white;
font-size : 50px;
}
#login-form #login-text:focus::placeholder{
color : transparent;
}
#login-form #login-submit{
display : none;
}
#todo-form {
color : white;
}
#todo-form input {
height: 30px;
width: 400px;
color : white;
background-color : transparent;
text-align: center;
outline : none;
border : 0px;
border-bottom : 2px solid white;
}
#todo-form input:focus {
outline : none;
}
#todo-form input::placeholder{
color : white;
font-size : 18px;
}
#todo-form input:focus::placeholder{
color : transparent;
}
ol {
text-align: center;
list-style-position: inside; // 이 속성을 이용해서 li태그의 목차도 함께 text-align:center의 속성을 적용할 수 있었음
height : auto;
margin-top : 20px;
margin-left : 0px;
padding-left : 0px;
}
button.delete {
background-color: transparent;
border : 0px;
}
div#quotes {
position : relative;
top: 60px;
padding-bottom : 30px;
}
top, left에 대한 AI의 설명
min-width,height:100%에 대한 설명
object-fit : cover
-대체 콘텐츠의 가로세로비를 유지하면서, 요소 콘텐츠 박스를 가득 채웁니다. 서로의 가로세로비가 일치하지 않으면 객체 일부가 잘려나갑니다.
https://developer.mozilla.org/ko/docs/Web/CSS/object-fit
object-fit - CSS: Cascading Style Sheets | MDN
CSS object-fit 속성은 <img>나 <video> 요소와 같은 대체 요소의 콘텐츠 크기를 어떤 방식으로 조절해 요소에 맞출 것인지 지정합니다.
developer.mozilla.org
letter-spacing, word-spacing
-글자 사이의 간격은 letter-spacing으로, 단어 사이의 간격은 word-spacing으로 정합니다.
https://www.codingfactory.net/10463
CSS / letter-spacing, word-spacing / 글자 사이 간격, 단어 사이 간격
letter-spacing, word-spacing 글자 사이의 간격은 letter-spacing으로, 단어 사이의 간격은 word-spacing으로 정합니다. 값이 커지면 간격이 커집니다. 값에는 음수를 넣을 수 있습니다. 음수를 값으로 하는 경
www.codingfactory.net
-해결하지 못한것
username을 입력하는 form이 있을때는, todo list와 todo form을 안보이게 hidden class를 추가하고 싶었는데, 다음과 같이 코드를 작성하니까 문제가 발생했음
-greeting.js
const loginForm = document.querySelector('#login-form');
const loginInput = document.querySelector('#login-form input');
const greeting = document.querySelector('#greeting');
// const toDoForm = document.querySelector("#todo-form");
// const toDoList = document.querySelector("#todo-list");
todo.js에서 사용했던 변수를 그대로 복붙해서 todo.js를 동일한 내용으로 const로 변수를 정의하지 못해서 발생했던 문제, 사용한 변수명을 바꾸니 해결됨.
const HIDDEN_CLASSNAME = "hidden"
const USERNAME_KEY = "username"
function loginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
localStorage.setItem(USERNAME_KEY, loginInput.value);
// toDoForm.classList.remove(HIDDEN_CLASSNAME);
// toDoList.classList.remove(HIDDEN_CLASSNAME);
paintGreetings();
}
function paintGreetings(){
const username = localStorage.getItem(USERNAME_KEY);
greeting.innerText = `Good Day, ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const savedUsername = localStorage.getItem(USERNAME_KEY);
if (savedUsername === null) {
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit", loginSubmit);
} else {
paintGreetings();
// toDoForm.addEventListener("submit", handleToDoSubmit);
// toDoForm.classList.remove(HIDDEN_CLASSNAME);
// toDoList.classList.remove(HIDDEN_CLASSNAME);
}
//to-do form을 제출할 시에 페이지가 새로고침되는 문제가 발생
적어놓은대로 to-do form을 submit하니까 페이지가 새로고침되는 문제가 발생함. 왜 이런 문제가 발생하는지는 잘 모르겠음. submit이라는 이벤트가 발생해서 새로고침되는거 같은데, to-do.js랑 합쳐야하는건지, 어떻게 해야할지를 모르겠어서 일단 남겨둠.
(23_09_26 추가/ greeting.js에서 todo.js에서 사용한 변수명을 동일하게 사용해서 발생했던 문제임. 변수명을 바꾸니 정상작동하였고, event.preventDefault()도 제대로 작동해서 새로고침도 안하게 됨.