안녕하세요 질문입니다
본문
<!-- darkmode/lightmode tail part-->
<button type="button" onclick="toggleDarkMode()" class="btn_dark_mode">
<span class="sound_only">다크모드 전환</span>
<!--<i class="fa fa-moon-o" aria-hidden="true"></i>-->
<i class="fa-solid fa-moon fa-beat" style="color:#ffd700"></i>
<i class="fa-solid fa-sun fa-beat" style="color:#ff0000"></i>
</button>
<style>
.btn_dark_mode {
position: fixed;
right: 20px;
bottom: 80px;
width: 50px;
height: 50px;
border: 1px solid #ddd;
border-radius: 50%;
background: #fff;
font-size: 20px;
z-index: 999;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.btn_dark_mode:hover {
/*background: #eee;*/
background: #f5f5f5;
transform: scale(1.05);
}
/* 다크모드일 때 */
/*
.darkreader .btn_dark_mode {
background: #333;
border-color: #666;
color: #fff;
}
*/
.darkreader .btn_dark_mode {
background: #2d2d2d;
border-color: #404040;
color: #ffffff;
box-shadow: 0 2px 5px rgb(255, 255, 255);
}
.darkreader .btn_dark_mode:hover {
background: #3d3d3d;
}
</style>
<!-- darkmode/lightmode tail part-->
<!---dark mode/light mode(head part)-->
<?php
// head.sub.php 하단에 추가
//$darkreader = get_cookie('darkreader');//not working as null cookie, so use below code.
$darkreader = isset($_COOKIE['darkreader']) ? $_COOKIE['darkreader'] : '';
?>
<!-- darkreader 스크립트 추가 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/darkreader/4.9.58/darkreader.min.js"></script>
<script>
// 다크모드 토글 함수
function toggleDarkMode() {
if (DarkReader.isEnabled()) {
DarkReader.disable();
set_cookie('darkreader', '', 365);
} else {
DarkReader.enable({
brightness: 100,
contrast: 90,
sepia: 10
});
set_cookie('darkreader', 'enabled', 365);
}
}
// 초기 다크모드 상태 설정
window.addEventListener('DOMContentLoaded', () => {
if('<?php echo $darkreader?>' === 'enabled') {
DarkReader.enable({
brightness: 100,
contrast: 90,
sepia: 10
});
}
});
</script>
<!---dark mode/light mode(head part)-->
안녕하세요 다크모드 만들기중인데 위의 코드를 이용해서 버튼 만들고 기능까지 했는데 위젯부분은 색이 변화되는데 헤드랑 바디 배경색이 안바뀝니다 뭐가 문제일까요 ?
보니까 게시판의 경우 basic 게시판은 제대로 바뀌는데 basic-board 게시판이 안바뀌네요
답변 1
헤드/바디가 바뀌지 않음은 CSS 적용 범위 문제와 DarkReader 스크립트의 영향 때문입니다.
DarkReader 기본은 filter: invert(100%) hue-rotate(180deg); 방식으로 다크모드를 적용하는데,
일부 요소가 예외 처리되어 기본 스타일을 유지해서일 것입니다.
그래서 헤드/바디가 다크모드 직접 적용되지 않았을 수 있으므로,
darkreader 클래스가 바디에 적용될 때 이를 직접 스타일링하는 추가 CSS가 필요합니다.
basic-board 게시판만 적용되지 않음은 개별 CSS 파일이 별도로 존재하거나,
기본적인 다크모드 스타일이 특정 클래스로 한정 적용되어 있을 가능성이 큽니다.
basic 게시판과 basic-board 게시판이 서로 다른 스타일 파일을 로드하고 있어서~
*헤드와 바디에도 다크모드 스타일을 강제 적용
.darkreader body {
background-color: #2d2d2d !important;
color: #ffffff !important;
}
.darkreader a {
color: #ffcc00 !important;
}
.darkreader header, .darkreader footer {
background-color: #1a1a1a !important;
}
.darkreader .container, .darkreader .wrapper {
background-color: #2d2d2d !important;
}
.darkreader h1, .darkreader h2, .darkreader h3, .darkreader h4, .darkreader h5, .darkreader h6 {
color: #ffffff !important;
}
*../basic-board/style.css, body 또는 .container 등의 색상이 강제로 지정되어 있는지 확인
- 아래 내용을 확인/추가
.darkreader body, .darkreader .container, .darkreader .wrapper {
background-color: #2d2d2d !important;
color: #ffffff !important;
}
.darkreader a {
color: #ffcc00 !important;
}
★붙임) DarkReader가 자동 적용 않되거나 강제로 배경/글자색을 지정하고 싶으시면,
JavaScript를 통해 직접 색을 변경하는 방법도 있음. (상기의 적용이 않될 때)
- head.sub.php에 아래 스크립트 추가 ( 선택적인 사용 )
<script>
window.addEventListener('DOMContentLoaded', () => {
if (DarkReader.isEnabled()) {
document.body.style.backgroundColor = "#2d2d2d";
document.body.style.color = "#ffffff";
}
});
</script>