FrontEnd

프론트 기본적인 화면구성잡는방식

husker1114 2023. 6. 22. 19:47

 

1.HTML 마크업

2.style잡기(기본틀)

3.js

 

1. HTML 마크업

<link rel="stylesheet" href="index.css" />
<script src="index.js" ></script>

 

- 화면을 모듈화하여 분리하는 단계 

 태그생성, 태그 class 설정

※ HTML에는 UI적인 요소만 기능적인 부분은 js파일에서 하는게 좋다. (영역 분리)

예 )

        로고

---------------

         메뉴

---------------

  화면 컨테이너

 

 

2. style잡기(기본틀)

기본설정 목록

display, vh, 

자주 쓰이는 속성 변수 선언

:root{
    
    /* annimation */
    --animation-duration: 300ms;
}

height: 100vh - 부모 태그와 상관없이 화면 전체 1~100 에서 얼마만큼을 보여줄지 정하는 설정이다. body에 설정해두는 편이다.

body {
    height: 92vh;
    display: flex;
    flex-direction: column;
    align-items: center;
}

display - flex 

display: flex;
flex-direction: column;
align-items: center;

flex - 태그들을 원하는 포지션으로 커스텀가능한 상태가된다.

flex-direction  - 로우식, 컬럼식으로 설정가능하고 default는 row이므로 column으로 사용하려면 이렇게 설정변경해준다. reverse로도 셋팅이 가능하다.

 

align-items: 높이를 정렬할수있다.

 

3. js

 3-1 fetch로 데이터 불러오기

const getData=()=>{
    return fetch(`data/data.json`)
        .then(data=>data.json())
        .then(data => data.item)
}
getData()
    .then((data)=>{
        //데이터를 불러오고난후 화면에 뿌려줄 html을 그려줄 함수에 data를 넘겨줌
        load(data)
        //그려진 html에 event들을 넣어주는 함수에 data를 넘겨줌
        addEvent(data)
    })
    .catch(e=>console.error(e));

 

3-2 원하는 html 생성

=> 

 방법은 2가지가있다

 - node를 생성해서 태그에 append하는 방법 

예)

 let div = document.createElement('div');
 div.classList.add('items')
 let table = document.createElement('table');
 table.createTBody().classList.add('table-body');
 table.classList.add('table')

 div.appendChild(table);

 - backtick을 활용해서 직접 태그를 만들어 태그에 innerHTML로 넣어주는방식

예)

const itemLoad=(item)=>{
    for(let i =0; i < item.length; i++){
        document.querySelector('.items').innerHTML += `<li><img class="itemImg" src=${item[i].img} /><span>${item[i].name}</span></li>`
    }
}

아래는 좀 더 가독성이 좋게 바꾼 방법

for문을 사용하지않고 map을 활용하는 방식 비슷한거같은데 복잡한 화면이 될수록 아래 엘리님 방식이 훨씬 가독성이 좋을거같다..

const itemLoad=(items)=>{
    document.querySelector('.items').innerHTML = items.map(item=>createHTMLString(item)).join('');
}

const createHTMLString=(item)=>{
return`
    <li>
        <img class="itemImg" src=${item.img} />
        <span>${item.name}</span>
     </li>`;
}

 

이벤트를 추가하는 함수

변경 전은 빠르게 함수를 선언할때 좋지만, js가 복잡해질거같다면 요소를 변수로 선언해서 사용하는게 좋을거같다는 생각이든다.

const addEvent=(item)=>{
// 변경 전 내 코드
    // document.querySelector('.logo').addEventListener('click',event => itemLoad(item));
    // document.querySelector('.buttons').addEventListener('click',event => filterEvent(event,item));

//    가독성 좋게 변경후
    const logo = document.querySelector('.logo');
    const buttons = document.querySelector('.buttons');

    logo.addEventListener('click',event => itemLoad(item));
    buttons.addEventListener('click',event => filterEvent(event,item));
}

 

이렇게 데이터를 불러오고 HTML을 그려주고 이벤트를 생성해줄수있다.