마른 땅으로 돌아갑니다. 섬이 필요 없이 낮부터 밤까지 블로그를 운영하세요!
이제 대화형 요소를 위한 Astro 섬을 구축할 수 있으므로 바닐라 JavaScript와 CSS만으로 꽤 많은 작업을 수행할 수 있다는 사실을 잊지 마세요!
브라우저에 프레임워크 JavaScript를 전송하지 않고 상호작용을 위해 또 다른 <script>
태그를 사용하여 사용자가 밝은 테마와 어두운 테마 사이를 전환할 수 있도록 클릭 가능한 아이콘을 만들어 보겠습니다.
요구 사항
- JavaScript 및 CSS만으로 대화형 테마 토글 구축
- 가능한 한 브라우저에 JavaScript를 적게 보내기!
테마 토글 아이콘 추가 및 스타일 지정
섹션 제목: 테마 토글 아이콘 추가 및 스타일 지정-
src/components/ThemeIcon.astro
에 새 파일을 만들고 다음 코드를 붙여넣습니다.src/components/ThemeIcon.astro ------<button id="themeToggle"><svg width="30px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path class="sun" fill-rule="evenodd" d="M12 17.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm0 1.5a7 7 0 1 0 0-14 7 7 0 0 0 0 14zm12-7a.8.8 0 0 1-.8.8h-2.4a.8.8 0 0 1 0-1.6h2.4a.8.8 0 0 1 .8.8zM4 12a.8.8 0 0 1-.8.8H.8a.8.8 0 0 1 0-1.6h2.5a.8.8 0 0 1 .8.8zm16.5-8.5a.8.8 0 0 1 0 1l-1.8 1.8a.8.8 0 0 1-1-1l1.7-1.8a.8.8 0 0 1 1 0zM6.3 17.7a.8.8 0 0 1 0 1l-1.7 1.8a.8.8 0 1 1-1-1l1.7-1.8a.8.8 0 0 1 1 0zM12 0a.8.8 0 0 1 .8.8v2.5a.8.8 0 0 1-1.6 0V.8A.8.8 0 0 1 12 0zm0 20a.8.8 0 0 1 .8.8v2.4a.8.8 0 0 1-1.6 0v-2.4a.8.8 0 0 1 .8-.8zM3.5 3.5a.8.8 0 0 1 1 0l1.8 1.8a.8.8 0 1 1-1 1L3.5 4.6a.8.8 0 0 1 0-1zm14.2 14.2a.8.8 0 0 1 1 0l1.8 1.7a.8.8 0 0 1-1 1l-1.8-1.7a.8.8 0 0 1 0-1z"/><path class="moon" fill-rule="evenodd" d="M16.5 6A10.5 10.5 0 0 1 4.7 16.4 8.5 8.5 0 1 0 16.4 4.7l.1 1.3zm-1.7-2a9 9 0 0 1 .2 2 9 9 0 0 1-11 8.8 9.4 9.4 0 0 1-.8-.3c-.4 0-.8.3-.7.7a10 10 0 0 0 .3.8 10 10 0 0 0 9.2 6 10 10 0 0 0 4-19.2 9.7 9.7 0 0 0-.9-.3c-.3-.1-.7.3-.6.7a9 9 0 0 1 .3.8z"/></svg></button><style>#themeToggle {border: 0;background: none;}.sun { fill: black; }.moon { fill: transparent; }:global(.dark) .sun { fill: transparent; }:global(.dark) .moon { fill: white; }</style> -
모든 페이지에 표시되도록
Header.astro
에 아이콘을 추가합니다. 컴포넌트를 가져오는 것을 잊지 마세요.src/components/Header.astro ---import Hamburger from './Hamburger.astro';import Navigation from './Navigation.astro';import ThemeIcon from './ThemeIcon.astro';---<header><nav><Hamburger /><ThemeIcon /><Navigation /></nav></header> -
http://localhost:4321
에서 브라우저 미리보기를 방문하여 이제 모든 페이지에서 아이콘을 확인하세요. 클릭해 볼 수는 있지만 아직 대화형으로 만드는 스크립트를 작성하지 않았습니다.
어두운 테마에 CSS 스타일 추가
섹션 제목: 어두운 테마에 CSS 스타일 추가어두운 테마에서 사용할 대체 색상을 선택하세요.
-
global.css
에서 몇 가지 어두운 스타일을 정의합니다. 직접 선택하거나 복사하여 붙여넣을 수 있습니다.src/styles/global.css html.dark {background-color: #0d0950;color: #fff;}.dark .nav-links a {color: #fff;}
클라이언트 측 상호작용 추가
섹션 제목: 클라이언트 측 상호작용 추가Astro 컴포넌트에 상호작용을 추가하려면 <script>
태그를 사용할 수 있습니다. 이 스크립트는 localStorage
에서 현재 테마를 확인 및 설정하고 아이콘을 클릭할 때 테마를 전환할 수 있습니다.
-
src/components/ThemeIcon.astro
의<style>
태그 뒤에 다음<script>
태그를 추가합니다.src/components/ThemeIcon.astro <style>.sun { fill: black; }.moon { fill: transparent; }:global(.dark) .sun { fill: transparent; }:global(.dark) .moon { fill: white; }</style><script is:inline>const theme = (() => {if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {return localStorage.getItem('theme');}if (window.matchMedia('(prefers-color-scheme: dark)').matches) {return 'dark';}return 'light';})();if (theme === 'light') {document.documentElement.classList.remove('dark');} else {document.documentElement.classList.add('dark');}window.localStorage.setItem('theme', theme);const handleToggleClick = () => {const element = document.documentElement;element.classList.toggle("dark");const isDark = element.classList.contains("dark");localStorage.setItem("theme", isDark ? "dark" : "light");}document.getElementById("themeToggle").addEventListener("click", handleToggleClick);</script> -
http://localhost:4321
에서 브라우저 미리보기를 확인하고 테마 아이콘을 클릭하세요. 밝은 테마와 어두운 테마 간에 변경할 수 있는지 확인하세요.
지식 테스트
섹션 제목: 지식 테스트다음 각 문장이 Astro <script>
태그, UI 프레임워크 컴포넌트 또는 둘 다를 설명하는지 선택하세요.
-
웹사이트에 대화형 UI 요소를 포함할 수 있습니다.
-
JavaScript를 클라이언트에 보내고 브라우저에서 실행하기 위해
client:
를 포함하지 않는 한 사이트에 정적 요소가 생성됩니다. -
이를 통해 해당 기술 스택을 사용하여 완전히 새로운 프로젝트를 시작할 필요 없이 새로운 프레임워크를 “시험해 볼” 수 있습니다.
-
이를 통해 다른 프레임워크에서 작성한 코드를 재사용할 수 있으며 종종 사이트에 바로 넣을 수 있습니다.
-
이를 통해 다른 JavaScript 프레임워크를 알거나 배울 필요 없이 대화형 기능을 추가할 수 있습니다.