Меняем стандартный вид подсветки синтаксиса DLE 19.x - PrismJS Тёмная тема
В итоге должна получиться красивая тёмная тема, как на данном сайте.
Править нужно файл: /public/prism/prism.css
Меняем всё его содержимое на:
/* PrismJS 1.30.0 - Modern Dark Theme */
code[class*="language-"],
pre[class*="language-"] {
color: #e9ecef;
background: #1a1b26;
text-shadow: none;
font-family: 'Menlo', 'Monaco', 'Cascadia Code', 'Consolas', 'Liberation Mono', 'Courier New', monospace;
font-size: 14px;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.6;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
/* Selection */
code[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
pre[class*="language-"]::-moz-selection {
background: #3d59a1;
color: #ffffff;
}
code[class*="language-"] ::selection,
code[class*="language-"]::selection,
pre[class*="language-"] ::selection,
pre[class*="language-"]::selection {
background: #3d59a1;
color: #ffffff;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
pre[class*="language-"] {
padding: 50px 10px 10px 16px;
margin: 20px 0;
overflow: auto;
position: relative;
border: 1px solid #2a2c3c;
transition: all 0.3s ease;
}
pre[class*="language-"]:hover {
border-color: #3a3c52;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4);
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #1a1b26;
}
:not(pre) > code[class*="language-"] {
padding: 4px 8px;
border-radius: 6px;
white-space: normal;
font-size: 0.9em;
background: #2a2c3c;
color: #e9ecef;
border: 1px solid #3a3c52;
}
/* Syntax Highlighting - Modern Colors */
.token.cdata,
.token.comment,
.token.doctype,
.token.prolog {
color: #6c7086;
font-style: italic;
}
.token.punctuation {
color: #89ddff;
}
.token.namespace {
opacity: 0.8;
}
.token.boolean,
.token.constant,
.token.deleted,
.token.number,
.token.property,
.token.symbol,
.token.tag {
color: #ff9e64;
}
.token.attr-name,
.token.builtin,
.token.char,
.token.inserted,
.token.selector,
.token.string {
color: #c3e88d;
}
.language-css .token.string,
.style .token.string,
.token.entity,
.token.operator,
.token.url {
color: #89ddff;
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #c099ff;
}
.token.class-name,
.token.function {
color: #82aaff;
}
.token.important,
.token.variable {
color: #ff757f;
}
.token.regex {
color: #f78c6c;
}
.token.bold,
.token.important {
color: #ffcb6b;
font-weight: 600;
}
.token.italic {
font-style: italic;
color: #ffcb6b;
}
.token.entity {
cursor: help;
color: #ffcb6b;
}
/* Code Toolbar - Modern Style */
div.code-toolbar {
position: relative;
margin: 25px 0;
}
div.code-toolbar > .toolbar {
position: absolute;
z-index: 10;
top: 12px;
right: 16px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
opacity: 0;
transform: translateY(-10px);
}
div.code-toolbar:hover > .toolbar,
div.code-toolbar:focus-within > .toolbar {
opacity: 1;
transform: translateY(0);
}
div.code-toolbar > .toolbar > .toolbar-item {
display: inline-block;
margin-left: 8px;
}
div.code-toolbar > .toolbar > .toolbar-item > a,
div.code-toolbar > .toolbar > .toolbar-item > button,
div.code-toolbar > .toolbar > .toolbar-item > span {
color: #a9b1d6;
font-size: 13px;
font-weight: 500;
padding: 8px 16px;
background: rgba(42, 44, 60, 0.9);
border: 1px solid #3a3c52;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
backdrop-filter: blur(10px);
text-shadow: none;
display: flex;
align-items: center;
gap: 6px;
}
div.code-toolbar > .toolbar > .toolbar-item > a:focus,
div.code-toolbar > .toolbar > .toolbar-item > a:hover,
div.code-toolbar > .toolbar > .toolbar-item > button:focus,
div.code-toolbar > .toolbar > .toolbar-item > button:hover,
div.code-toolbar > .toolbar > .toolbar-item > span:focus,
div.code-toolbar > .toolbar > .toolbar-item > span:hover {
color: #ffffff;
background: #3d59a1;
border-color: #3d59a1;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(61, 89, 161, 0.3);
text-decoration: none;
}
/* Copy Button States */
.copy-to-clipboard-button[data-copy-state="copy"] {
background: rgba(42, 44, 60, 0.9) !important;
}
.copy-to-clipboard-button[data-copy-state="copied"] {
background: #10b981 !important;
border-color: #10b981 !important;
color: white !important;
}
.copy-to-clipboard-button[data-copy-state="copy-error"] {
background: #ef4444 !important;
border-color: #ef4444 !important;
color: white !important;
}
/* Custom Scrollbar for Code Blocks */
pre[class*="language-"]::-webkit-scrollbar {
height: 8px;
width: 8px;
}
pre[class*="language-"]::-webkit-scrollbar-track {
background: #1a1b26;
border-radius: 0 0 12px 12px;
}
pre[class*="language-"]::-webkit-scrollbar-thumb {
background: #3a3c52;
border-radius: 4px;
border: 2px solid #1a1b26;
}
pre[class*="language-"]::-webkit-scrollbar-thumb:hover {
background: #4a4c66;
}
pre[class*="language-"]::-webkit-scrollbar-corner {
background: #1a1b26;
}
/* Firefox Scrollbar */
pre[class*="language-"] {
scrollbar-width: thin;
scrollbar-color: #3a3c52 #1a1b26;
}
/* Custom styles for specific languages */
.token.bbcode .token.tag {
color: #ff9e64;
}
.token.bbshortcode .token.tag {
color: #c099ff;
}
.token.string-property.property {
color: #c3e88d;
}
/* Line Numbers (optional) */
pre[class*="language-"].line-numbers {
padding-left: 3.8em;
counter-reset: linenumber;
}
pre[class*="language-"].line-numbers > code {
position: relative;
}
.line-numbers .line-numbers-rows {
position: absolute;
pointer-events: none;
top: 0;
font-size: 100%;
left: -3.8em;
width: 3em;
letter-spacing: -1px;
border-right: 1px solid #2a2c3c;
user-select: none;
}
.line-numbers-rows > span {
pointer-events: none;
display: block;
counter-increment: linenumber;
}
.line-numbers-rows > span:before {
content: counter(linenumber);
color: #6c7086;
display: block;
padding-right: 0.8em;
text-align: right;
}
/* Responsive Design */
@media (max-width: 768px) {
pre[class*="language-"] {
padding: 20px 16px;
margin: 16px 0;
border-radius: 8px;
font-size: 13px;
}
div.code-toolbar > .toolbar {
position: relative;
top: auto;
right: auto;
opacity: 1;
transform: none;
margin-top: 12px;
display: flex;
justify-content: flex-end;
}
div.code-toolbar::before {
position: relative;
top: auto;
left: auto;
display: inline-block;
margin-bottom: 8px;
}
}
/* Animation for code blocks */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
div.code-toolbar {
animation: fadeInUp 0.5s ease;
}
/* Focus styles for accessibility */
div.code-toolbar > .toolbar > .toolbar-item > button:focus {
outline: 2px solid #3d59a1;
outline-offset: 2px;
}
/* Для разных языков */
pre[class*="language-"]::before {
content: 'code';
position: absolute;
top: 12px;
left: 16px;
background: rgba(61, 89, 161, 0.9);
color: white;
padding: 4px 12px;
border-radius: 6px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
z-index: 1;
}
pre.language-markup::before { content: 'html'; }
pre.language-css::before { content: 'css'; }
pre.language-jаvascript::before { content: 'javascript'; }
pre.language-php::before { content: 'php'; }
pre.language-sql::before { content: 'sql'; }
pre.language-bash::before { content: 'bash'; }
Сохраняем, очищаем кеш. В браузере жмём Ctr+F5.
Дополнение:
Делаем компактный вид для длинного кода.
/* Улучшенные скроллбары для длинного контента */
pre[class*="language-"] {
scroll-behavior: smooth; /* Плавная прокрутка */
scrollbar-width: thin; /* Тонкий скроллбар в Firefox */
max-height: 500px; /* Ограничение высоты с прокруткой */
}
/* Стилизация скроллбара для Webkit браузеров (Chrome, Safari, Edge) */
pre[class*="language-"]::-webkit-scrollbar {
width: 12px;
height: 12px;
}
pre[class*="language-"]::-webkit-scrollbar-track {
background: #1a1b26;
border-radius: 0 0 12px 12px;
}
pre[class*="language-"]::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, #3a3c52, #4a4c66);
border-radius: 6px;
border: 3px solid #1a1b26;
transition: all 0.3s ease;
}
pre[class*="language-"]::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, #4a4c66, #5a5c76);
transform: scale(1.1);
}
pre[class*="language-"]::-webkit-scrollbar-corner {
background: #1a1b26;
}
/* Показать скроллбар только при необходимости */
pre[class*="language-"] {
overflow: auto;
}
/* Индикатор прокрутки */
pre[class*="language-"]::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 20px;
background: linear-gradient(transparent, #1a1b26);
pointer-events: none;
opacity: 0;
transition: opacity 0.3s ease;
}
pre[class*="language-"]:hover::after {
opacity: 1;
}
Готово.
Комментариев 0