Подтвердить что ты не робот

Остановить переход CSS от запуска при загрузке страницы

У меня проблема с тем, что CSS-свойство transition срабатывает при загрузке страницы.

Проблема заключается в том, что когда я применяю color transition к элементу (например: transition: color.2s), то при первой загрузке страницы мои элементы мигает с черного на свой собственный назначенный цвет.

Предположим, у меня есть следующий код:

CSS

p.green {
   color: green;
   transition: color .2s;
   -moz-transition: color .2s;
   -webkit-transition: color .2s;
   -o-transition: color .2s;
}

p.green:hover {
   color: yellow;
}

HTML

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="js/main.js"></script>
    <link href="css/main.css" rel="stylesheet" />
</head>
<body>
    <p class="green">The Flashing Text</p>
</body>
</html>

При загрузке страницы мой p.green исчезнет с black на green.

Я не хочу применять цветовой переход к псевдоклассу :hover как это не применимо к переходу onMouseLeave.

Я действительно раздражаю, когда текст вспыхивает на веб-странице. До этого момента я избегал использования переходов, если они мне действительно не нужны, и даже при этом я использую их с осторожностью. Было бы здорово, если бы было какое-то действительно очевидное решение, которого я не вижу!

Это происходит в Google Chrome. Я не тестировал в других браузерах.

jsfiddle.net/ShyZp/2 (спасибо @Shmiddty)

4b9b3361

Ответ 1

Комментарии @Shmiddty по этому вопросу заставили меня задуматься, поэтому я поиграл с кодом и нашел решение.

Проблема заключается в объявлениях header. Инвертируя порядок вызовов внешних файлов CSS и JS - т.е. помещая CSS перед JS - цветовые переходы прекращают срабатывание при загрузке страницы:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="css/main.css" rel="stylesheet" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="js/main.js"></script>
</head>

Я предполагаю, что загрузка JS задерживала загрузку CSS до того, как DOM был готов. К тому времени (как предположил @Shmiddty) тексту уже был назначен цвет браузера по умолчанию, и затем он использовал мое объявление CSS- transition для transition в его стилизованный цвет.

** Я до сих пор не уверен, что это самый подходящий способ сделать это, но он работает. Если у кого-то есть лучшее решение, пожалуйста, не стесняйтесь добавлять или редактировать.

Ответ 2

В Chrome есть ошибка, которая вызывает переходы CSS, если страница содержит элемент <form>.

Одним из простых исправлений является добавление тега скрипта, содержащего один пробел, в нижний колонтитул страницы.

<script> </script>

Вы можете следить за ошибкой по адресу https://crbug.com/332189 и https://crbug.com/167083.

Ответ 3

Добавьте к своему CSS:

.css-transitions-only-after-page-load * {
  -webkit-transition: none !important;
  -moz-transition: none !important;
  -ms-transition: none !important;
  -o-transition: none !important;
}

И добавьте немного кода в ваш глобальный файл JavaScript:

$(document).ready(function () {
    $(".css-transitions-only-after-page-load").each(function (index, element) {
        setTimeout(function () { $(element).removeClass("css-transitions-only-after-page-load") }, 10);
    });
});

Теперь вы можете пометить любой элемент на вашей странице классом css-transitions-only-after-page-load:

<div class="container css-transitions-only-after-page-load">
...
</div>

Ответ 4

Принятый ответ не помог мне. В Google Chrome есть bug, чего можно избежать только с помощью добавления script на странице. Даже пустая script решает проблему.

Ответ 5

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

1. Добавьте класс "preload" к элементу body:

<body class="preload">

2. Добавьте следующий CSS:

.preload * {
  -webkit-transition: none !important;
  -moz-transition: none !important;
  -ms-transition: none !important;
  -o-transition: none !important;
 }

3 Добавьте следующий JS:

$(document).ready(function() {
  $("body").removeClass("preload");
});

Ответ 6

Ниенн отправляет решение. Проблема заключается в заголовке документа, и где/как вы загружаете свои таблицы стилей. Это похоже на "не может изменить заголовки, они уже отправлены" в PHP, за исключением того, что HTML/CSS/webkit не выдает ошибку.

У меня возникла именно эта проблема, прочитал пост nienn, и я пересмотрел свою голову. Здесь было мое содержание ранее.

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <html lang="en">
    <meta name="description" content="A website for me to do whatever I want with." >
    <title>My title</title>
    <link rel="stylesheet" type="text/css" href="/mD/media/foot.css">
    <link rel="stylesheet" href="mD/media/head.css" type="text/css">
</head>

Обратите внимание, что я не загружаю JS, также обратите внимание на то, как я загружал страницу таблиц стилей после указания заголовка. После перемещения ссылок на таблицы стилей на "задний план" он работал как шарм. Конечный результат выглядел так:

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <html lang="en">
    <meta name="description" content="A website for me to do whatever I want with." >
    <link rel="stylesheet" type="text/css" href="/mD/media/foot.css">
    <link rel="stylesheet" href="mD/media/head.css" type="text/css">
    <title>My title</title>
</head>

Это может быть не только JavaScript, но и название сайта. Полагаю, хорошее правило - css> js> title сайта.

Ответ 7

Лучший способ решить эту проблему - использовать одно пространство, пустое <script> исправление, найденное в ответах на этой странице. Однако я нашел 2 других способа решить эту проблему.

  • Поместите CSS оскорбительного элемента (ов) внутри тега <style> в заголовок вашего HTML файла. Ошибка возникает только при вызове CSS из внешней таблицы стилей.
  • Поместите нарушающий элемент в контейнер flexbox. Это также исправляет ошибку.

Ответ 8

Пробовали ли вы использовать разные свойства перехода? Например:

-moz-transition: color .2s; /* Firefox 4 */
-webkit-transition: color .2s; /* Safari and Chrome */
-o-transition: color .2s; /* Opera */

Работала отлично для меня в Chrome.

EDIT: Вы уже ответили на вопрос о браузерах. Вы должны попробовать использовать -webkit-transform