Ответы пользователя по тегу HTML
  • Как правильно наложить оверлей?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Ответ написан
    Комментировать
  • Как лучше делать адаптивные размеры у блоков не имеющих font-size?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Используйте единицы vw и vh, они зависят от ширины и высоты окна браузера и очень хорошо подходят для создания адаптивных отступов.

    .section {
      padding: calc(10px + 2vw);
    }


    В примере 2vw добавит динамичный отступ в зависимости от ширины окна браузера.
    Ответ написан
    Комментировать
  • Как загрузить пользовательское изображение на сервер?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Выберите изображение:</label>
        <input type="file" name="file" id="file" required>
        <button type="submit">Загрузить</button>
    </form>


    <?php
    $target_dir = "img/";
    
    $target_file = $target_dir . basename($_FILES["file"]["name"]);
    
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    $check = getimagesize($_FILES["file"]["tmp_name"]);
    if($check !== false) {
        if (file_exists($target_file)) {
            echo "Файл уже существует.";
        } else {
            if ($_FILES["file"]["size"] > 2000000) {
                echo "Файл слишком большой.";
            } else {
                $allowed_types = array('jpg', 'jpeg', 'png', 'gif');
                if (in_array($imageFileType, $allowed_types)) {
                    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)
                }
            }
        }
    }
    ?>
    Ответ написан
  • Как отключить автозакрытие тега при копипасте VSCODE?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    За автозакрытие тегов отвечает настройка html.autoClosingTags.
    Если у вас в параметрах стоит галочка возле данного пункта, то снимите её:

    66ef09f42b44a957323061.png
    Ответ написан
    1 комментарий
  • Как выравнить текст ниже картинки по середине?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Ответ написан
    Комментировать
  • Как сделать анимации появления картинок при нажатии на кнопку?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Для вашей задачи достаточно будет использования свойств opacity и transition вместо visibility.

    <div class="knopka">
      <div class="kn">
        <button onclick="showElement()">Показать больше</button>
      </div>
      
      <div class="kn1">
        <button onclick="hideElement()">Скрыть</button>
      </div>
      
      <div class="container" id="imageContainer">
        <div class="scr41">
          <img src="/Untitled (5)/Group 10.png" alt="Image 1">
        </div>
      
        <div class="scr51">
          <img src="/Untitled (5)/Group 11.png" alt="Image 2">
        </div>
    
        <div class="scr51">
          <img src="/Untitled (5)/Group 12.png" alt="Image 3">
        </div>
      </div>
    </div>


    .knopka {
        text-align: end;
    }
    
    .kn {
        margin-top: -55px;
        margin-right: 350px;
    }
    
    .kn button, .kn1 button {
        color: #4E4E4E;
        border-radius: 5px;
        background-color: #F7F7F7;
        font-size: 15px;
        border: none;
        width: 200px;
        height: 40px;
    }
    
    .kn button:hover, .kn1 button:hover {
        background-color: #ffa34857;
        color: rgb(0, 0, 0);
        transition: all 0.6s ease;
    }
    
    .container {
        justify-content: center;
        display: flex;
        opacity: 0;
        transition: opacity 1s ease-in-out;
        pointer-events: none;
    }
    
    .container.show {
        opacity: 1;
        pointer-events: auto;
    }
    
    .scr41 img, .scr51 img {
        margin-top: 70px;
        width: 140px;
    }


    function showElement() {
        const element = document.getElementById('imageContainer');
        element.classList.add('show');
    }
    
    function hideElement() {
        const element = document.getElementById('imageContainer');
        element.classList.remove('show');
    }
    Ответ написан
    Комментировать
  • Как удалить Content-Security-Policy?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Наверное, одним из универсальных вариантов будет использование прокси-сервера, который вам поможет обойти заголовки CSP путем маршрутизации запросов через сервер, где эти заголовки могут быть изменены.

    На node.js он разворачивается довольно просто:

    const http = require('http');
    const httpProxy = require('http-proxy');
    
    const proxy = httpProxy.createProxyServer({});
    
    http.createServer(function(req, res) {
        proxy.web(req, res, {
            target: 'https://game-analytics.ru',
            changeOrigin: true,
            selfHandleResponse: true
        });
    
        proxy.on('proxyRes', function(proxyRes, req, res) {
            let body = [];
    
            proxyRes.on('data', function(chunk) {
                body.push(chunk);
            });
    
            proxyRes.on('end', function() {
                body = Buffer.concat(body);
                res.setHeader('Content-Security-Policy', '');
                res.writeHead(proxyRes.statusCode, proxyRes.headers);
                res.end(body);
            });
        });
    
    }).listen(3000, () => {
        console.log('Прокси-сервер запущен на порту 3000');
    });


    В вашем коде используйте прокси-адрес при создании iframe окна:

    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Создание Iframe через JavaScript</title>
    </head>
    <body>
    <div id="iframe-container"></div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const iframe = document.createElement('iframe');
            iframe.setAttribute('src', 'http://localhost:3000');
            document.getElementById('iframe-container').appendChild(iframe);    
        });
    </script>
    </body>
    </html>
    Ответ написан
  • Как сделать динамическое добавление на ajax, чтобы записи не дублировались?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    1. Используй метод .off() для удаления предыдущих обработчиков событий перед добавлением нового.
    2. Исправь код AJAX, чтобы ограничить количество перерисовок элементов.

    $("#modal").off('submit').on('submit', function (e) { 
        e.preventDefault();
        var form_data = $(this).serialize();
    
        $.ajax({
            type: "POST",
            url: "user/add.php",
            data: form_data,
            success: function (html) {
                document.getElementById("shadow").style.display = "none";
                document.getElementById("modal").style.display = "none";
                $('#modal').trigger('reset');
                $("#main").append(html);
            }
        });
    });


    add.php:

    require "../database/Task.php";
    
    if (isset($_POST['title']) && isset($_POST['description'])) {
        $task_mess = new Task;
        $task_mess->add_task($_POST['title'], $_POST['description']);
    
        $new_task = $task_mess->get_last_task();
    
        echo "<div class='task'>
                <h3>{$new_task['title']}</h3>
                <p>{$new_task['description']}</p>
              </div>";
    }
    Ответ написан
    2 комментария