
이 프로젝트를 처음 시작하게 된 동기는 각 웹사이트에 있는 버튼들을 3D 효과를 주면 이쁘지 않을까? 하는 마음에 시작하게 되었지만, 생각보다 button 태그가 없었다..
이럴거면 모든 태그에 효과를 주어야 하나? 하는 생각에 오히려 모든 태그를 분석할 수 있는 프로그램을 만들자고 생각을 하였고 그래서 새롭게 기획한 내용입니다.
웹사이트를 둘러보며 버튼들을 분석하던 중, 예상과 다른 현실을 발견:
<button> 태그겠지?"<div>, <a>, <span> 등 다양한 태그 사용<button> 태그만 분석하는 것은 한정적, 실제 웹사이트 구조 분석에는 전체 태그 파악이 필요웹사이트의 HTML 구조를 시각적으로 분석할 수 있는 개발자/디자이너용 크롬 확장 프로그램
팝업에서 원하는 HTML 태그를 선택하면 해당 페이지의 모든 해당 태그를 시각적으로 하이라이트
팝업 UI 레이아웃:
┌────────────────────────────────┐
│ HTML 태그 분석 도구 │
├────────────────────────────────┤
│ 📝 기본 태그 │
│ [button] [div] [span] │
│ [a] [p] [h1] [h2] [h3] │
│ │
│ 🏗️ 구조 태그 │
│ [header] [nav] [main] │
│ [section] [article] [aside] │
│ [footer] │
│ │
│ 📋 폼 태그 │
│ [input] [textarea] [select] │
│ [form] [label] │
│ │
│ 📊 통계 │
│ button: 12개 발견 │
│ div: 156개 발견 │
│ 현재 하이라이트: button │
└────────────────────────────────┘
<button>: 🔵 파란색 3D 효과 + 펄스<input type="button/submit">: 🔵 파란색 점선 테두리<a> (버튼 역할): 🟣 보라색 테두리 + 링크 아이콘<div>: 🟢 초록색 반투명 배경<span>: 🟡 노란색 인라인 하이라이트<section>: 🔴 빨간색 구조 박스<header>: 📌 "HEADER" 라벨 표시<nav>: 🧭 "NAV" 라벨 표시<main>: 🎯 "MAIN" 라벨 표시<footer>: 📍 "FOOTER" 라벨 표시하이라이트된 요소에 호버 시 상세 정보 툴팁:
┌────────────────────────────┐
│ <div> 태그 │
├────────────────────────────┤
│ • 클래스: btn btn-primary │
│ • ID: main-button │
│ • 크기: 120px × 40px │
│ • 위치: (250, 300) │
│ • 역할: 버튼처럼 동작 │
└─────────────────────────────┘
여러 태그를 동시에 선택하여 비교 분석 가능:
페이지의 태그 사용 현황을 숫자로 표시:
// 선택된 태그들 찾기
function findElementsByTags(selectedTags) {
const results = {};
selectedTags.forEach(tag => {
results[tag] = Array.from(document.querySelectorAll(tag))
.filter(isVisible);
});
return results;
}
// 태그별 통계 생성
function generateTagStatistics() {
const allTags = ['div', 'span', 'button', 'a', 'p', 'h1', 'h2', 'h3',
'header', 'nav', 'main', 'section', 'article', 'footer'];
return allTags.map(tag => ({
name: tag,
count: document.querySelectorAll(tag).length
})).sort((a, b) => b.count - a.count);
}
/* 태그별 하이라이트 스타일 */
.tag-highlight-button {
outline: 3px solid #3B82F6 !important;
box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.3) !important;
animation: pulse-blue 2s infinite !important;
position: relative !important;
}
.tag-highlight-div {
background: rgba(16, 185, 129, 0.15) !important;
outline: 2px solid #10B981 !important;
}
.tag-highlight-a {
outline: 2px dashed #8B5CF6 !important;
position: relative !important;
}
/* 시맨틱 태그 라벨 */
.tag-highlight-header::before {
content: "HEADER" !important;
position: absolute !important;
top: -25px !important;
left: 0 !important;
background: #EF4444 !important;
color: white !important;
padding: 2px 8px !important;
font-size: 12px !important;
font-weight: bold !important;
}
// 전역 상태
const appState = {
selectedTags: new Set(),
highlightedElements: new Map(),
isEnabled: true,
showLabels: true,
showStatistics: true
};
// 태그 선택/해제
function toggleTag(tagName) {
if (appState.selectedTags.has(tagName)) {
removeHighlight(tagName);
appState.selectedTags.delete(tagName);
} else {
addHighlight(tagName);
appState.selectedTags.add(tagName);
}
updateUI();
}
<button> 클릭 → 실제 button 태그는 거의 없음<div>, <a> 태그도 추가로 선택 → 대부분이 div나 a 태그로 구현됨<header>, <nav>, <section> 등을 순차적으로 선택<button> vs <div> 사용 패턴 비교<header>, <main>, <footer> 등 구조 태그 사용 여부 확인