KineticJS에서 그룹(Group)과 레이어(Layer)의 차이점KineticJS는 HTML5 캔버스를 활용한 웹 애플리케이션을 개발할 때 사용되는 대표적인 자바스크립트 라이브러리입니다. 이 라이브러리로 화면을 구성하려면 그룹(Group)과 레이어(Layer)라는 두 가지 핵심 개념을 제대로 이해하고 활용해야 합니다.두 개념을 한 문장으로 요약하면 다음과 같습니다. 그룹은 객체들을 담아두는 컨테이너이고, 레이어는 캔버스를 나누는 분리자입니다.그룹(Group): 객체를 하나로 묶는 컨테이너그룹은 여러 도형 객체를 하나의 단위로 묶
flex-flow: column wrap 적용 시 플렉스 컨테이너 레이아웃 정리CSS Flexbox에서 컨테이너에 고정(fixed) 높이와 display: flex를 지정한 상태에서 자식 요소들을 세로(열) 방향으로 배치하고 싶다면 flex-flow 속성을 활용하면 됩니다. 이 글에서는 column wrap 적용 시 자주 마주치는 크롬 브라우저의 여백 문제와 그 해결 방법을 예제 코드와 함께 정리합니다.1. flex-flow를 column wrap으로 설정하기자식 항목들이 위에서 아래로 쌓이다가 컨테이너 높이를 초과하면 새로운 열(
SVG 요소의 fill 속성에 외부 링크를 적용할 때 CSS3 전환(transition) 효과가 정상적으로 작동하지 않는 문제가 발생할 수 있습니다. 많은 개발자들이 :visited 선택자를 활용해 이 문제를 해결하려고 시도하지만, 안타깝게도 :visited 상태만으로는 이 문제를 해결할 수 없습니다.해결 방법: URL에 랜덤 쿼리 문자열 추가가장 효과적인 해결책은 링크 URL에 랜덤 쿼리 파라미터를 추가하여 브라우저가 해당 페이지를 방문하지 않은 상태로 인식하게 만드는 것입니다. 아래와 같이 PHP의 rand() 함수를 활용하면
HTML5 캔버스에서 이미지의 일부만 그리기HTML5 캔버스(Canvas)에서 이미지 전체가 아닌 특정 영역만 잘라내어 화면에 그리고 싶다면 drawImage() 메서드를 사용하면 됩니다. 이 메서드는 소스 이미지의 원하는 좌표와 크기를 지정해 스프라이트(sprite)처럼 필요한 부분만 렌더링할 수 있어 게임 개발 등에서 매우 유용하게 활용됩니다.단, 주의해야 할 점이 있습니다. 이미지의 onload 함수는 이미지가 브라우저에 처음 로드될 때 단 한 번만 실행된다는 것입니다. 따라서 애니메이션 루프 안에서 반복적으로 이미지를 그려야
캔버스 회전 시 좌표 변환이 필요한 이유 HTML5 캔버스(Canvas)로 작업하다 보면 캔버스 자체를 회전해야 하는 상황이 자주 발생합니다. 문제는 캔버스가 회전하면 내부 좌표계도 함께 회전한다는 점입니다. 즉, 마우스 클릭 위치나 특정 지점의 좌표를 그대로 사용하면 실제 화면상의 위치와 어긋나게 됩니다. 따라서 캔버스에 적용한 회전 변환(rotation transform)과 동일한 변환을 해당 점의 좌표에도 적용해 주어야 정확한 위치를 계산할 수 있습니다. Transform 클래스로 회전 후 점 감지하기 이 문제를 해결하는 가
마우스를 이미지 위에 올렸을 때 <div> 또는 <span> 요소가 이미지 위에 나타나도록 만드는 것은 CSS의 :hover 선택자와 오버레이(overlay) 기법으로 간단하게 구현할 수 있습니다. 이 기법은 이미지 위에 캡션이나 설명 텍스트를 보여주는 UI에서 널리 사용됩니다.동작 원리핵심은 두 가지입니다. 첫째, 부모 요소인 .image에 position: relative를 지정하고 자식 요소인 .overlay에 position: absolute를 적용해 부모를 기준으로 절대 위치시킵니다. 부모에 displ
원 충돌 감지의 기본 원리 두 원이 서로 충돌했는지 확인하는 가장 직관적인 방법은 두 원의 중심 사이 거리를 계산한 뒤, 여기서 각 원의 반지름을 빼는 것입니다. 이 값이 0보다 작거나 같다면 두 원은 겹쳐 있는 상태, 즉 충돌한 상태라고 판단할 수 있습니다. 반대로 말하면, 두 중심 사이의 거리가 두 반지름의 합보다 크거나 같으면 두 원은 서로 닿아 있지 않다는 뜻입니다. 빠른 사전 검사로 연산 최적화하기 충돌 검사 대상인 원의 개수가 많아지면 모든 원 쌍에 대해 정밀한 거리 계산을 수행하는 것은 비효율적입니다. 예를 들어 원이
HTML5 preload 속성이란?HTML5에서 비디오가 재생되기 전에 미리 로딩되는 것을 막으려면 preload 속성을 사용하면 됩니다. 이 속성은 <video> 태그에 추가하며, 페이지가 열릴 때 브라우저가 비디오 파일을 어느 정도까지 미리 내려받을지에 대한 힌트를 제공합니다.용량이 큰 영상을 포함한 페이지라면, 사용자가 실제로 재생하기 전까지 비디오를 로딩하지 않도록 설정하는 것이 초기 로딩 속도와 데이터 사용량 측면에서 매우 유용합니다.preload 속성의 주요 값none: 비디오를 전혀 미리 로드하지 않습니다.
HTML5를 활용한 크로스플랫폼 모바일 개발은 하나의 코드베이스로 안드로이드, iOS 등 다양한 플랫폼을 동시에 지원할 수 있어 개발 시간과 비용을 크게 절약할 수 있는 효율적인 방식입니다. 이번 글에서는 HTML5 기반 모바일 앱 개발에 널리 사용되는 대표적인 프레임워크 4가지를 소개합니다.1. Kendo UIKendo UI는 완성도 높은 크로스플랫폼 모바일 애플리케이션을 개발할 수 있도록 지원하는 프레임워크입니다. 풍부한 UI 위젯과 데이터 시각화 컴포넌트를 갖추고 있어, 전문적이고 가치 있는 모바일 앱을 빠르게 구축하고 싶은
HTML5에서 파일 업로드 크기를 확인해야 하는 이유 웹 애플리케이션에 파일 업로드 기능을 구현할 때는 사용자가 지나치게 큰 파일을 올리지 않도록 사전에 검증하는 것이 중요합니다. 서버에서 처리하기 전에 클라이언트 측에서 먼저 파일 크기를 확인하면 불필요한 트래픽과 오류를 줄일 수 있고, 사용자에게도 즉각적인 피드백을 제공할 수 있습니다. 다행히 HTML5의 File API를 사용하면 별도의 라이브러리 없이도 선택된 파일의 크기를 손쉽게 알아낼 수 있습니다. 핵심은 <input type=file> 요소의 files[0].
CORS(교차 출처 리소스 공유)란 무엇인가?교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 웹 브라우저에서 다른 도메인에 있는 제한된 리소스에 접근할 수 있도록 허용하는 메커니즘입니다.기본적으로 웹 브라우저는 보안상의 이유로 동일 출처 정책(Same-Origin Policy)을 적용하여, 현재 페이지와 다른 도메인 간의 리소스 요청을 차단합니다. 하지만 CORS를 활용하면 서버가 명시적으로 특정 외부 출처의 접근을 허용함으로써, 안전하게 교차 도메인 통신이 가능해집니다.CORS의 실제 동
HTML에서 중첩 테이블(nested table)이란 테이블 셀(<td>) 안에 또 다른 테이블을 배치하는 구조를 의미합니다. 복잡한 데이터를 계층적으로 표현하거나 세부적인 레이아웃을 구성할 때 활용할 수 있습니다.예제다음은 HTML에서 중첩 테이블을 구현한 기본 예제입니다. 바깥쪽 테이블의 하나의 셀 안에 새로운 테이블이 포함되어 있는 형태입니다.<!DOCTYPE html> <html> <head> <meta charset
웹 페이지 전체를 캔버스(canvas)로 채우려면 캔버스 요소가 페이지의 너비와 높이를 100% 차지하도록 설정해야 합니다. 단순히 캔버스에 width와 height를 지정하는 것만으로는 부족하고, 브라우저의 기본 여백을 제거하고 상위 요소들의 높이를 함께 조정해야 화면 가장자리까지 빈틈없이 채울 수 있습니다.CSS 코드 예시* { margin: 0; padding: 0; } body, html { height: 100%; } #canvas { position: absolute; height: 1
개요HTML5 Canvas에서 원 안에 텍스트를 그리려면 context.beginPath() 메서드로 새로운 경로를 시작한 뒤, 원을 그리고 그 위에 텍스트를 렌더링하면 됩니다. 이 글에서는 클릭한 위치에 파란색 원을 그리고, 그 중앙에 흰색 텍스트를 배치하는 실제 예제를 단계별로 살펴봅니다.원 안에 텍스트 그리기 예제다음은 jQuery의 클릭 이벤트를 활용해 캔버스 위를 클릭하면 해당 좌표에 원과 텍스트를 함께 그리는 자바스크립트 코드입니다.$(#demo).on(click, #canvas1, function(event) {&nbs
로컬 스토리지(Local Storage)란?로컬 스토리지는 여러 브라우저 창에 걸쳐 데이터를 공유하고, 현재 세션이 종료된 이후에도 정보를 지속적으로 보존할 수 있도록 설계된 웹 스토리지 기술입니다. 특히 웹 애플리케이션은 성능 향상을 위해 사용자가 작성한 문서 전체나 메일함 같은 수 메가바이트 규모의 사용자 데이터를 클라이언트 측에 저장해야 하는 경우가 많습니다.하지만 로그인 아이디나 비밀번호 같은 민감한 자격 증명(credential)을 로컬 스토리지에 그대로 저장하면 XSS 공격 등에 의해 노출될 위험이 있습니다. 이를 방지하
반응형 웹 디자인에서 확대/축소 비활성화하기 반응형 웹 디자인(responsive design)에서 사용자의 확대/축소(zoom) 기능을 비활성화하려면 META 뷰포트(viewport) 태그를 생성해야 합니다. 이때 user-scalable 속성을 no로 설정하면 사용자가 화면을 임의로 확대하거나 축소할 수 없게 됩니다. user-scalable=no 메타 태그 추가 방법 HTML 문서의 <head> 영역에 아래 코드를 추가하면 반응형 웹 디자인에서 확대/축소 기능이 비활성화됩니다. <meta name=viewpor
Amazon S3가 CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)를 공식적으로 지원하면서 HTML5 기반 파일 업로드가 드디어 가능해졌습니다. 이제 Plupload의 HTML5 런타임을 활용하면 서버를 거치지 않고 브라우저에서 S3 버킷으로 파일을 직접 전송할 수 있습니다.왜 이전에는 불가능했을까?브라우저의 동일 출처 정책(Same-Origin Policy) 때문에 과거에는 클라이언트 측 JavaScript에서 다른 도메인의 리소스에 접근하는 것이 제한되었습니다. 그 결과 파일 업로드 시
HTML5 iframe srcdoc 속성의 대안 HTML의 <iframe> 태그는 문서 안에 인라인 프레임을 만들어 다른 HTML 문서를 삽입할 때 사용됩니다. 이때 srcdoc 속성을 활용하면 iframe에 표시할 페이지의 HTML 콘텐츠를 직접 지정할 수 있습니다. 다만 구형 브라우저와의 호환성 문제 등으로 인해 srcdoc 속성을 사용할 수 없는 상황이 발생할 수 있습니다. 이런 경우에는 JavaScript를 이용해 동일한 결과를 얻는 것이 좋은 대안이 됩니다. 대안 방법: document.write() 활용하기 i
HTML5 Canvas에서 큰 글꼴 그리기 HTML5 Canvas에서 큰 글꼴을 제대로 그리려면 font 속성에 원하는 글자 크기와 서체를 지정한 뒤, fillText()와 strokeText() 메서드를 함께 사용하면 됩니다. 아래 예제 코드를 직접 실행해 보세요. var myCanvas = document.getElementById(myCanvas); var context = myCanvas.getContext(2d); context.font = 180pt Georgia; context.strokeStyle = #FF0000;
HTML5 <polygon> 태그란?HTML5에서는 SVG(Scalable Vector Graphics)를 활용해 웹 페이지에 벡터 그래픽을 직접 그릴 수 있습니다. 그중 <polygon> 태그는 여러 개의 점을 연결하여 닫힌 다각형을 만드는 데 사용되는 요소입니다. 삼각형, 오각형, 별 모양 등 다양한 형태를 좌표 값만으로 간단하게 표현할 수 있다는 것이 큰 장점입니다.주요 속성points: 다각형을 구성하는 각 꼭짓점의 x, y 좌표를 쉼표로 구분하여 나열합니다. 좌표와 좌표 사이는 공백으로 구분합니다.fi