목록전체보기 (483)
음악, 삶, 개발
HTML5 의 canvas 는 보통 div 안에 넣어서 아래와 같이 사용을 한다. 이 상황에서의 문제점은, browser 크기를 조절할때 canvas 는 가만히 있게 된다. 이 부분에 대해 window.addEventListener('resize') 를 활용하여, 브라우저 크기가 변할때마다 cavas.width 와 canvas.height 을 변경하는 JS 코드를 작성했었으나, 퍼포먼스는 매우 처참했다. 엄청나게 느리게 브라우저 크기가 조절이 된것이다. 이것저것 해본 결과 결론을 내었다. 1. canvas 를 꽤나 크게 만든다. canvas.width = 2000 canvas.height = 2000 2. css 를 사용해 div 에 맞춰 stretch 한다. .parent { position: rela..
이 부분이 작업할때마다 매번 해깔려서 다시 정리해놓으려한다. 위와 같은 상황에서, grid 를 사용하면 자식은 전혀 건들지않고, 부모의 css 에서 자식의 넓이를 결정할수있다. .parent { height: 100%; /* 반드시!! 안하면 자식이 안줄어서 y 스크롤바 생김 */ display: grid; grid-auto-flow: column; grid-auto-columns: 5rem; /* 자식 넓이 */ overflow: auto; } 이렇게만 하면 자식의 css 는 전혀 설정할 필요없다. 위의 코드를 보다시피, 반드시 height 를 100% 로 해줘야한다. 이는 자식의 height 로 inherit 되기때문이다. 부모의 height 이 설정되지않은 경우, scroll-bar 가 생긴만큼 자..
React 프로젝트 생성 툴을 cra 에서 vite 로 변경하였다. https://vitejs.dev/guide/#scaffolding-your-first-vite-project npx create-react-app my-app --template typescript 에서.. npm init @vitejs/app my-vue-app -- --template react-ts 로 이동하였다. Vite 는 예전 vue 를 사용할때 써보긴했었는데, react 프로젝트를 생성할수있는줄은 몰랐다. 개인적으로 cra 보다 훨씬 빠릿한 느낌이 든다. 무엇보다 tailwindcss 를 사용하기위해서는 vite 랑은 이미 협업상태라 매우 잘 돌아가는데, cra 에서는 npm run start 를 계속 실행해줘야 css 가..
힘들다...무슨말이 필요할까 어릴때처럼 말을 길게 쓰는 능력이 사라져간다. 음... 그냥 담고 없애버린다.
그동안 px 만 사용하다가 responsive layout 을 구현하게되면서 큰 벽에 부딛혔고, 하루종일 구글링을 하며, 각 property 에 적합한 unit 을 찾아보았다. "적절히 잘 써야한다" 는 개발할시 날 매우 혼란스럽게 만들기에, 많은 글들을 보여 조금 결론을 내보았다. width : % font-size : rem padding : em @media query : px px 를 사용하는 위치는 media query 이외에는 거의없지만, box-shadow 나 border 또한 px 로 사용한다. 대부분 1px ~ 4px 매우 작은 단위이기때문. .container { width: 100%; /* % */ font-size: 1rem; /* rem */ padding: 0.1em; /* em..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/wXVD7/btq8aveGqCX/2P29iHiohw8ByxHSObKpI1/img.png)
1 2 3 4 5 6 7 8 위와 같이, 1 -> 2 -> 3 -> 4 -> ... 8 을 화면에서는 거꾸로 쌓이게끔 해보자. .container { display: flex; flex-direction: column-reverse; } flex-direction 속성에서 column 또는 row 뒤에 -reverse 를 붙여주면된다. 또한, 각 item 들을 stretch 해주기위해 item 들의 속성에 flex-grow 를 1로 설정한다. .item { flex-grow: 1; } 결과물.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mqQTH/btq746r82Sl/P8rhxp5oOk0p7EF3bw0aj1/img.png)
React 앱을 작성하다보면, className 이나 id 를 고유한 파일안에 const 로 정리해놓는것이 좋다. 추후 event listener 로 id 나 classname 또는 dataset 을 확인할때 유용하기때문이다. 나는 className 과 id 를 따로 구분하지않고 그냥 AppNames 라는 ts 파일안에 다 몰아서 적었다. 어짜피 id 면 suffix 를 숫자로 추후 붙여주거나 할수있기때문이다. /* AppNames.ts */ export const APP = 'app' export const APP_HEADER = `${APP}-header` as const export const APP_FOOTER = `${APP}-footer` as const 참조 : https://leestrum..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cl8aEB/btq70mJEJGZ/pgO8kynPI9HX5t15JQwlQK/img.png)
Node 에서 string 과 string 을 연결할때 ${} 기호를 자주 사용하곤한다. export const APP = 'app' export const APP_HEADER = `${APP}-header` // app-header 하지만 일반적으로 const 로 작성된 string 은 리터럴 type 으로 지정이 되는 반면, ${} 가 들어가버리면 string type 으로 지정이 된다. 대부분의 경우 상관이 없겠지만, APP 과 APP_HEADER 를 하나의 type 으로 사용하고자할때 문제가 된다. 우리가 기대하는건 'app' | 'app-header' 일텐데, 일괄적으로 string 으로 잡혀버린다. 이를 고치기위해서는 ${} 를 사용한 변수뒤에 as const 를 붙여야한다. export co..
지금까지 id 나 classname 뒤에 _1, _2 식으로 원하는 글짜를 추가한뒤에, 다시 event listener 에서 파싱하는 귀찮은 작업을 했었는데, 사용자 정의 속성을 정의할수있다는것을 알았다. data-속성명 으로 html 태그안에 아래와 같이 넣어준다. 이때 중요한것은 속성명은 절대 camelCase 가 아닌 kebab-case 로 작성되어야한다. html 은 kebab-case 를 기본으로 사용하며, 만약 camelCase 를 사용하는 경우 react 에서는 에러가 난다. 속성명이 길다면 - 를 사이에 껴넣어서 표현해야한다. 이렇게 속성을 저장하였다면, 반대로 event listener 로 가져오는 방법도 알아야한다. const data = e.target.dataset dataset 이..