코드 에디터
코드 에디터는 사후 대기실 디자인에 대한 완전한 제어가 필요한 사용자를 위한 고급 편집 기능을 제공합니다. 이 문서는 코드 에디터에서 코드 수정이 미리보기에 어떤 영향을 미치는지, 그리고 변경 사항이 실시간으로 어떻게 반영되는지 설명합니다.
빠른 참조
| 코드 요소 | 간편 설정 설정 | 사용자 정의 가능 | 참고 사항 |
|---|---|---|---|
.nf-vwr-background | 배경 이미지 | ✅ 예 | 배경 색상/이미지, 패딩 |
.nf-vwr-image3 | 이미지 3 (주요 UI 배경) | ✅ 예 | 배경 색상/이미지, 패딩, 테두리 반경 |
.nf-vwr-image1 | 이미지 1 | ✅ 예 | 배경 이미지, 크기, 위치 |
.nf-vwr-image2 | 이미지 2 | ✅ 예 | 배경 이미지, 크기, 위치 |
.nf-vwr-title | 제목 | ✅ 예 | 텍스트, 색상, 글꼴 크기, 가시성 |
.nf-vwr-description | 내용 | ✅ 예 | 텍스트, 색상, 글꼴 크기, 가시성 |
#nf-vwr-cancel | 추천 이벤트 버튼 (닫기 버튼) | ✅ 예 | 텍스트, 색상, 불투명도, URL 속성 |
요소 ID (예: nf-vwr-*) | - | ❌ 수정 금지 | 시스템 기능에 필요 |
클래스 이름 (예: nf-vwr-*) | - | ⚠️ 주의 | 일부 클래스는 시스템에서 사용됨 |
개요
코드 에디터를 사용하면 코드 형식(HTML/CSS)으로 디자인 속성을 직접 수정하여 사용자 정의에 최대한의 유연성을 제공할 수 있습니다. 모든 코드 변경 사항은 미리보기 영역에 즉시 반영되어 수정 결과를 실시간으로 확인할 수 있습니다.
코드 에디터 접근
에디터 모드로 전환
코드 에디터에 접근하려면:
- 간편 설정에서 간편 설정에서 에디터 모드로 전환
- 코드 편집을 위한 코드 에디터가 사용 가능해짐
- 간편 설정 설정에서 생성된 코드가 자동으로 로드됨
에디터 모드(코드 에디터)에 들어가면 간편 설정이 비활성화됩니다. 에디터 모드에서 간편 설정 모드로 돌아갈 수 있지만, 간편 설정 모드로 다시 전환하면 에디터 모드에서 입력한 모든 사용자 정의 코드가 자동으로 재설정되고 손실됩니다.
코드 구조 개요
코드 에디터는 간편 설정에서 구성된 설정에 해당하는 HTML/CSS 코드를 로드합니다. 코드 구조를 이해하면 목표로 하는 수정을 할 수 있습니다.
CSS 변수 시스템
새로운 코드 구조는 :root에 정의된 CSS 사용자 정의 속성(변수)을 광범위하게 사용하여 중앙화된 스타일 제어를 제공합니다. 모든 디자인 속성은 이러한 변수를 통해 제어되므로 일관된 외관을 쉽게 사용자 정의할 수 있습니다.
주요 CSS 변수:
--nf-main-*: 메인 테마 색상 및 글꼴--nf-title-*: 제목 스타일 옵션--nf-desc-*: 내용 스타일 옵션--nf-image1-*,--nf-image2-*,--nf-image3-*: 이미지 표시 및 스타일--nf-bg-*: 배경 색상 및 이미지--nf-close-*: 닫기 버튼 스타일--nf-*-display: 가시성 제어 (block, none, flex, grid 등)
CSS 변수의 장점:
- 중앙화된 제어:
:root의 값을 변경하여 관련된 모든 요소를 업데이트 - 쉬운 테마 변경: 변수를 수정하여 일관된 색상 체계 생성
- 동적 업데이트: JavaScript를 통해 변수를 변경하여 런타임 사용자 정의 가능
HTML 구조 매핑
HTML 구조는 다음과 같이 간편 설정 설정에 매핑됩니다:
배경 레이어
<div class="nf-vwr-background">
- 간편 설정 설정: 배경 이미지
- 사용자 정의 가능: 배경 색상 (
background-color), 배경 이미지 (background-image), 패딩 - 위치: 전체 화면 배경 (주요 UI 요소 외부)
주요 UI 컨테이너
<div class="nf-vwr-image3">
- 간편 설정 설정: 이미지 3 (주요 UI 요소 배경)
- 사용자 정의 가능: 배경 색상/이미지, 패딩, 테두리 반경, 너비, 최대 너비
- 위치: 주요 사후 대기실 UI 컨테이너
이미지
<div class="nf-vwr-image1"></div>
<div class="nf-vwr-image2"></div>
- 간편 설정 설정: 이미지 1, 이미지 2
- 사용자 정의 가능: 배경 이미지 URL, 크기, 위치, 가시성 (
display: none사용) - 위치: 주요 UI 컨테이너 내부
제목
<div class="nf-vwr-title">Please enter the title</div>
- 간편 설정 설정: 제목
- 사용자 정의 가능: 텍스트 콘텐츠, 색상, 글꼴 크기, 글꼴 두께, 가시성
- 위치: 주요 UI 컨테이너 내부
내용
<div class="nf-vwr-description nf-vwr-pause-hidden">내용을 입력해주세요.</div>
- 간편 설정 설정: 내용
- 사용자 정의 가능: 텍스트 콘텐츠, 색상, 글꼴 크기, 가시성
- 위치: 주요 UI 컨테이너 내부
- 참고:
nf-vwr-pause-hidden클래스는 시스템에서 일시정지 상태 관리에 사용될 수 있습니다
추천 이벤트 버튼 (닫기 버튼)
<button id="nf-vwr-cancel" class="nf-vwr-cancel" data-nf-cancel-url="">
<span>닫기</span>
</button>
- 간편 설정 설정: 추천 이벤트 버튼 (닫기 버튼) 동작
- 사용자 정의 가능:
- 버튼 텍스트 (
<span>태그 내부) - 색상 (background-color, color, border-color)
- 불투명도
- URL 속성 (
data-nf-cancel-url="")
- 버튼 텍스트 (
- ⚠️ 중요:
- 요소 ID (
id="nf-vwr-cancel")를 수정하지 마세요 data-nf-cancel-url속성을 제거하지 마세요 (리디렉션 기능에 필요)- 참고: 사후 대기실은
data-nf-cancel-url속성을 사용합니다
- 요소 ID (
푸터 정보
<div class="nf-vwr-copyright">Powered by <strong>NetFUNNEL</strong> | © STCLab Inc.</div>
- 간편 설정 설정: 푸터 텍스트 (색상 사용자 정의를 통해)
- 사용자 정의 가능: 텍스트 콘텐츠, 색상, 글꼴 크기, 가시성
- 위치: 주요 UI 컨테이너 내부
안전한 사용자 정의 영역
✅ 수정 가능
CSS 속성:
- 색상 (
color,background-color) - 글꼴 속성 (
font-size,font-weight,font-family) - 간격 (
padding,margin,gap) - 레이아웃 (
display,flex-direction,align-items,justify-content) - 크기 조정 (
width,max-width,min-width,height) - 시각 효과 (
border-radius,opacity,box-shadow) - 배경 이미지 (
background-image,background-size,background-position)
HTML 콘텐츠:
- ID가 없는 요소의 텍스트 콘텐츠 (예:
.nf-vwr-title,.nf-vwr-description) - 버튼 텍스트 (예: "Close")
- 푸터 텍스트
HTML 속성:
data-nf-cancel-url속성 값 (리디렉션 URL용)<html>태그의lang속성 (언어용)<title>태그 콘텐츠<link rel="icon">href 속성 (파비콘용)
CSS 변수:
:root의 모든--nf-*CSS 사용자 정의 속성 수정 가능- 변수 값은 색상, 글꼴, 간격, 가시성을 제어합니다
⚠️ 주의하여 수정
요소 ID:
id="nf-vwr-*"가 있는 모든 요소는 시스템에서 사용됩니다- ID를 수정하면 기능이 손상됩니다
- 규칙: 요소 ID를 변경하거나 제거하지 마세요
클래스 이름:
- 일부 클래스는 시스템에서 참조될 수 있습니다
- 규칙: 확실하지 않으면 저장하기 전에 미리보기에서 변경 사항을 테스트하세요
❌ 수정 금지
중요한 요소 ID:
id="nf-vwr-cancel"
중요한 속성:
data-nf-cancel-url속성 이름 (버튼 기능에 필요)- 동적 콘텐츠 컨테이너의 요소 구조
:root의 CSS 변수 이름 (변수 이름 변경 시 기능이 손상됨)
일반적인 사용자 정의 예제
제목 텍스트 및 스타일 변경
방법 1: CSS 변수 사용 (권장)
:root {
--nf-title-color: #ff0000; /* 제목 색상 변경 */
--nf-title-font-size: 28px; /* 글꼴 크기 증가 */
}
방법 2: 직접 CSS 오버라이드
.nf-vwr-title {
color: #ff0000; /* 제목 색상 변경 */
font-size: 28px; /* 글꼴 크기 증가 */
font-weight: 700; /* 더 굵게 */
}
<div class="nf-vwr-title">Thank You for Waiting</div>
요소 숨기기
방법 1: CSS 변수 사용 (권장)
:root {
--nf-desc-display: none; /* 내용 숨기기 */
}
방법 2: CSS Display
.nf-vwr-description {
display: none; /* 내용 숨기기 */
}
방법 3: HTML 주석
<!-- <div class="nf-vwr-description nf-vwr-pause-hidden">내용을 입력해주세요.</div> -->
색상 변경
CSS 변수 사용 (권장):
:root {
/* 배경 색상 */
--nf-bg-color: #1a1a1a; /* 어두운 배경 */
--nf-image3-bg-color: #ffffff; /* 흰색 주요 UI 배경 */
/* 텍스트 색상 */
--nf-title-color: #3354ff; /* 파란색 제목 */
--nf-desc-color: #666666; /* 회색 내용 */
}
직접 CSS 오버라이드:
.nf-vwr-background {
background-color: #1a1a1a; /* 어두운 배경 */
}
.nf-vwr-image3 {
background-color: #ffffff; /* 흰색 배경 */
}
.nf-vwr-title {
color: #3354ff; /* 파란색 제목 */
}
.nf-vwr-description {
color: #666666; /* 회색 내용 */
}
버튼 수정
버튼 텍스트:
<button id="nf-vwr-cancel" class="nf-vwr-cancel" data-nf-cancel-url="https://example.com">
<span>Continue</span>
</button>
버튼 스타일링 (CSS 변수 사용):
:root {
--nf-close-bg-color: #ff0000; /* 빨간색 배경 */
--nf-close-text-color: #ffffff; /* 흰색 텍스트 */
--nf-close-border-color: #cc0000; /* 더 어두운 빨간색 테두리 */
}
버튼 스타일링 (직접 CSS):
.nf-vwr-cancel {
background-color: #ff0000; /* 빨간색 배경 */
color: #ffffff; /* 흰색 텍스트 */
border-color: #cc0000; /* 더 어두운 빨간색 테두리 */
border-radius: 12px; /* 더 둥글게 */
}
버튼 URL:
<button id="nf-vwr-cancel" class="nf-vwr-cancel" data-nf-cancel-url="https://yoursite.com/home">
<span>Close</span>
</button>
배경 이미지 추가
CSS 변수 사용 (권장):
:root {
--nf-bg-url: url('https://example.com/background.jpg');
--nf-image1-url: url('https://example.com/image1.png');
--nf-image2-url: url('https://example.com/image2.png');
--nf-image3-url: url('https://example.com/image3.png');
}
직접 CSS 오버라이드:
.nf-vwr-background {
background-image: url('https://example.com/background.jpg');
background-size: cover;
background-position: center;
}
.nf-vwr-image1 {
background-image: url('https://example.com/image1.png');
background-size: contain;
}
고급 프로그래밍 사례
사례 1: 동적 언어 전환
시나리오: 사용자 로케일에 따라 다른 언어로 사후 대기실 표시.
구현:
- 사용자 로케일 감지 (브라우저 언어, URL 매개변수 등)
- JavaScript를 사용하여 텍스트 콘텐츠를 동적으로 수정
- 필요한 경우 언어별 글꼴에 대한 CSS 업데이트
예제:
// 로케일 감지 및 텍스트 업데이트
const locale = navigator.language || 'en';
const translations = {
'en': { title: 'Thank You for Waiting', description: 'Enjoy the event!' },
'ko': { title: '대기해 주셔서 감사합니다', description: '이벤트를 즐겨보세요!' },
'ja': { title: 'お待ちいただきありがとうございます', description: 'イベントをお楽しみください' }
};
const title = document.querySelector('.nf-vwr-title');
const description = document.querySelector('.nf-vwr-description');
title.textContent = translations[locale]?.title || translations['en'].title;
description.textContent = translations[locale]?.description || translations['en'].description;
규칙:
- ✅ ID가 없는 요소의 텍스트 콘텐츠 수정 가능
- ✅ 동적 콘텐츠를 위한 JavaScript 추가 가능
- ❌ 요소 ID 수정 금지
- ⚠️ 다양한 로케일에서 철저히 테스트
사례 2: 사용자 정의 자산 추가
시나리오: 사용자 정의 글꼴, 이미지 또는 기타 자산 로드.
구현:
- 외부 리소스에 대해
<head>에<link>태그 추가 - 이미지에 대해 CSS에서
url()사용 - 자산이 접근 가능한지 확인 (CORS, HTTPS)
예제 - 사용자 정의 글꼴:
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
</head>
.nf-vwr-title {
font-family: 'Roboto', sans-serif;
}
예제 - 사용자 정의 이미지:
.nf-vwr-image1 {
background-image: url('https://cdn.example.com/custom-image.png');
}
규칙:
- ✅
<head>에<link>태그 추가 가능 - ✅ CSS
url()에서 외부 URL 사용 가능 - ⚠️ 자산이 접근 가능한지 확인 (CORS 활성화, HTTPS)
- ⚠️ 로딩 성능 고려
사례 3: 사용자 정의 로직 추가
시나리오: 향상된 기능을 위한 사용자 정의 JavaScript 추가.
구현:
</body>태그 앞에<script>태그 추가- 기존 요소 ID를 사용하여 대기실 요소와 상호 작용
- NetFUNNEL의 핵심 기능을 재정의하지 마세요
예제 - 사용자 정의 분석:
<body>
<!-- ... 기존 코드 ... -->
<script>
// 사용자 정의 분석 추적
document.getElementById('nf-vwr-cancel').addEventListener('click', function() {
// 추천 이벤트 버튼 (닫기 버튼) 클릭 추적
console.log('Close button clicked');
// 분석 서비스로 전송
});
</script>
</body>
규칙:
- ✅ 사용자 정의
<script>태그 추가 가능 - ✅ 기존 요소에 이벤트 리스너 추가 가능
- ❌ 필수 요소 ID 제거 또는 수정 금지
- ⚠️ 호환성을 보장하기 위해 철저히 테스트
사례 4: 조건부 스타일링
시나리오: 조건(시간대, 사용자 유형 등)에 따라 다른 스타일 적용.
구현:
- JavaScript를 사용하여 조건 감지
- CSS 변수 수정 또는 CSS 클래스 추가/제거
- CSS 변수는 중앙화된 제어와 더 나은 성능을 제공합니다
예제 - 시간 기반 스타일링 (CSS 변수 사용):
<script>
const hour = new Date().getHours();
const root = document.documentElement;
if (hour >= 6 && hour < 18) {
// 라이트 모드
root.style.setProperty('--nf-bg-color', '#f0f0f0');
root.style.setProperty('--nf-image3-bg-color', '#ffffff');
root.style.setProperty('--nf-title-color', '#2F3033');
} else {
// 다크 모드
root.style.setProperty('--nf-bg-color', '#1a1a1a');
root.style.setProperty('--nf-image3-bg-color', '#2a2a2a');
root.style.setProperty('--nf-title-color', '#ffffff');
}
</script>
예제 - 직접 스타일 수정:
<script>
const hour = new Date().getHours();
const background = document.querySelector('.nf-vwr-background');
if (hour >= 6 && hour < 18) {
background.style.backgroundColor = '#f0f0f0'; // 라이트 모드
} else {
background.style.backgroundColor = '#1a1a1a'; // 다크 모드
}
</script>
규칙:
- ✅ JavaScript를 통해 CSS 변수 수정 가능 (권장)
- ✅ JavaScript를 통해 CSS 클래스 및 인라인 스타일 수정 가능
- ✅ 조건부 로직 추가 가능
- ⚠️ 변경 사항이 핵심 기능을 손상시키지 않는지 확인
- ⚠️ 다양한 조건에서 테스트
사례 5: 사용자 정의 애니메이션
시나리오: 사용자 정의 애니메이션 또는 전환 추가.
구현:
- CSS에서
@keyframes정의 - 요소에 애니메이션 적용
- 기존 애니메이션과 간섭하지 않는지 확인
예제:
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.nf-vwr-title {
animation: fadeIn 1s ease-in;
}
규칙:
- ✅ 사용자 정의
@keyframes추가 가능 - ✅ CSS 애니메이션 추가 가능
- ⚠️ 기존
@keyframes수정 금지 (있는 경우 marquee, entering) - ⚠️ 애니메이션 성능 테스트
프로그래밍 규칙 요약
✅ 허용된 작업
- CSS 수정: 모든 CSS 속성 수정 가능 (색상, 글꼴, 간격, 레이아웃 등)
- CSS 변수:
:root의 모든--nf-*CSS 사용자 정의 속성 수정 가능 (중앙화된 스타일링) - HTML 콘텐츠: ID가 없는 요소의 텍스트 콘텐츠 수정 가능 (
<span>태그 내부 텍스트 포함) - HTML 속성: 안전한 속성 수정 가능 (
data-nf-cancel-url,lang,title,href) - 리소스 추가: 글꼴, 스타일시트 등을 위한
<link>태그 추가 가능 - 스크립트 추가: 추가 기능을 위한 사용자 정의
<script>태그 추가 가능 - 요소 추가: 새로운 HTML 요소 추가 가능 (주의 - 레이아웃에 영향을 줄 수 있음)
⚠️ 제한된 작업
- 요소 ID:
nf-vwr-*로 시작하는 ID를 수정하거나 제거하지 마세요 - 필수 속성:
data-nf-cancel-url속성 이름 제거 금지 - CSS 변수 이름: CSS 변수 이름 수정 금지 (예:
--nf-title-color), 값만 수정 가능 - 핵심 애니메이션: 기존
@keyframes수정 금지 (있는 경우 marquee, entering) - 요소 구조: 동적 콘텐츠 컨테이너의 구조 수정 시 주의
- 시스템 클래스:
nf-vwr-pause-hidden과 같은 시스템에서 사용하는 클래스 주의
❌ 금지된 작업
- 필수 요소 제거: ID가 있는 요소 제거 금지
- 기능 손상: 대기실 기능을 손상시키는 변경 금지
- 보안 위험: 보안 위험을 초래하는 스크립트 추가 금지
베스트 프랙티스
코드 구성
- 주석 사용: 사용자 정의 섹션을 식별하기 위한 주석 추가
- 구조 유지: 코드를 체계적이고 읽기 쉽게 유지
- 점진적 테스트: 작은 변경을 하고 자주 테스트
미리보기 모니터링
- 각 변경 후 확인: 각 수정 후 미리보기에서 변경 사항 확인
- 다양한 시나리오 테스트: 미리보기 컨트롤을 사용하여 다양한 해상도에서 테스트
- 기능 검증: 모든 대화형 요소가 올바르게 작동하는지 확인
안전 가이드라인
- 코드 백업: 주요 변경 전에 코드 백업 저장
- 철저한 테스트: 수정 후 모든 기능 테스트
- 변경 사항 문서화: 수정된 내용과 이유에 대한 메모 유지
주요 변경을 하기 전에 항상 코드를 백업하세요. 간편 설정 모드로 재설정한 후에는 코드 변경 사항을 복구할 수 없습니다.
사후 대기실은 사전 대기실과 일반 대기실보다 간단하며, 감사 메시지와 이벤트 추천에 중점을 둡니다. 핵심 기능을 유지하면서 모든 시각적 요소를 사용자 정의할 수 있습니다.