Универсальная подсветка кода и кнопка «Копировать» для любых сайтов

Юрий Герук 2025-12-03 39
Универсальная подсветка кода и кнопка «Копировать» для любых сайтов

Содержание

    Универсальная подсветка кода и кнопка «Копировать» для любых сайтов

    В любой технической статье примеры кода играют огромную роль. Но если этот код выглядит серым, скучным и слипшимся — читатель страдает, а ты теряешь качество подачи. Подсветка синтаксиса делает текст понятным, аккуратным и профессиональным, а кнопка «Копировать» экономит время тем, кто хочет забрать пример себе.

    Главное преимущество решения в том, что оно работает полностью автоматически. Никаких правок старых статей, никаких новых разметок. Любой код, который у тебя уже был вставлен в <pre>, станет красивым и удобным.

    Для чего это нужно

    Подсветка кода:

    • делает статью визуально чище
    • помогает читателю быстрее понимать примеры
    • увеличивает качество восприятия материала
    • повышает доверие к сайту
    • улучшает UX для разработчиков и технарей

    Кнопка «Копировать» помогает:

    • быстро забрать весь код одним кликом
    • не выделять текст вручную
    • не копировать лишние пробелы и элементы оформления

    Это особенно полезно в блогах, документациях, инструкциях, туториалах, статьях с примерами HTML, JS, PHP, CSS и других языков.

    Как установить

    Вставь код ниже в нижнюю часть сайта(футер), прямо перед </body>.
    Он содержит сразу обе функции:
    автоматическую подсветку синтаксиса через Highlight.js и кнопку копирования.

    Код для подключения подсветки и кнопки

    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
    
    <script>
    document.addEventListener("DOMContentLoaded", function () {
     document.querySelectorAll("pre").forEach(function (pre) {
     if (pre.dataset.hlProcessed === "1") return;
     pre.dataset.hlProcessed = "1";
    
     var code = pre.querySelector("code");
    
     if (!code) {
     code = document.createElement("code");
     var text = pre.textContent.replace(/^\n+/, "").replace(/\s+$/, "");
     code.textContent = text;
     pre.innerHTML = "";
     pre.appendChild(code);
     }
    
     var btn = document.createElement("button");
     btn.className = "copy-code-button";
    
     var icon = document.createElement("i");
     icon.className = "bi bi-clipboard";
    
     var label = document.createTextNode(" Копировать");
    
     btn.appendChild(icon);
     btn.appendChild(label);
    
     pre.prepend(btn);
    
     btn.addEventListener("click", function () {
     var clone = pre.cloneNode(true);
     var btnInside = clone.querySelector(".copy-code-button");
     if (btnInside) btnInside.remove();
    
     var txt = clone.innerText;
    
     navigator.clipboard.writeText(txt).then(function () {
     btn.classList.add("copied");
     icon.className = "bi bi-check-lg";
     label.textContent = " Скопировано!";
     setTimeout(function () {
     btn.classList.remove("copied");
     icon.className = "bi bi-clipboard";
     label.textContent = " Копировать";
     }, 2000);
     });
     });
    
     hljs.highlightElement(code);
     });
    });
    </script>
    

    Стили кнопки (работают везде, даже без Bootstrap)

    Если у вас подключен Bootstrap — кнопка возьмёт часть его оформления.
    Если Bootstrap отсутствует — стили ниже обеспечат нормальный вид на любом сайте.

    Добавить в CSS:

    .copy-code-button {
     position: absolute;
     top: 8px;
     right: 8px;
     padding: 4px 10px;
     font-size: 12px;
     background: #2d2d2d;
     color: #fff;
     border: none;
     border-radius: 4px;
     cursor: pointer;
     display: flex;
     align-items: center;
     gap: 4px;
     opacity: 0.8;
     transition: 0.2s;
     z-index: 2;
    }
    
    .copy-code-button:hover {
     opacity: 1;
    }
    
    pre {
     position: relative;
     padding-top: 36px;
    }
    

    Эти стили:

    • обеспечивают аккуратный внешний вид кнопки
    • добавляют отступ сверху, чтобы кнопка не перекрывала текст
    • гарантируют корректное отображение иконки и текста
    • работают в любом дизайне, независимо от фреймворков

    Заключение

    Теперь весь код в ваших статьях автоматически отображается красиво благодаря подсветке, а читатели могут мгновенно копировать его одной кнопкой. Это улучшает удобство, повышает качество блога и делает примеры кода профессиональными.

    Решение универсальное и работает на любых сайтах, включая uCoz, статические блоги, самописные движки, документации и обучающие проекты.

    Оцените полезность материала!

    Лицензия: CC BY-SA 4.0

    Автор: Юрий Герук

    Комментарии