CSS для изменения цвета последнего слова в h1 - программирование
Подтвердить что ты не робот

CSS для изменения цвета последнего слова в h1

У меня есть сайт, который я разрабатываю с помощью CSS3, и у меня есть тег h1 для заголовка:

<h1>main title</h1>

Теперь я хочу, чтобы заголовок был другого цвета:

<h1>main <span>title</span></h1>

Итак, я:

h1 {
 color: #ddd;
}
h1 span {
 color: #333;
}

Есть ли способ не использовать тег span и указывать только в CSS, что последнее слово отличается от другого?

4b9b3361

Ответ 1

Это невозможно с чистым CSS. Однако вы можете использовать lettering.js, чтобы получить селектор ::last-word. CSS-Tricks имеет отличную статью по этому вопросу: CSS-Tricks: вызов для nth-everything. Затем вы можете сделать следующее:

h1 {
  color: #f00;
}

/* EDIT: Needs lettering.js. Please read the complete post,
 * before downvoting. Instead vote up. Thank you :)
 */
h1::last-word {
  color: #00f;
}

Ответ 2

"последнее слово" не будет работать в каждом браузере; например, он не работает с Safari. Я бы не принял принятый ответ. Я не думаю, что было бы неплохо импортировать целую библиотеку или плагин, чтобы изменить последнее слово одного названия, это как "убить ошибку с помощью пушки"... Вместо этого я бы использовал одну функцию Javascript и глобальный класс. Что-то вроде этого:

<h1>This is my awesome <span class="last-word">title</span></h1>

CSS

<style>
    .last-word {font-weight:bold; /* Or whatever you want to do with this element */ }
</style>

Изначально у вас было бы что-то вроде этого:

<h1 class="title">This is my awesome title</h1>

Затем вы можете инициализировать Javascript-метод, чтобы изменить последнее слово на $(document).ready() = >

<script>
    $(document).ready(function() {
        $('.title').each(function(index, element) {
            var heading = $(element);
            var word_array, last_word, first_part;

            word_array = heading.html().split(/\s+/); // split on spaces
            last_word = word_array.pop();             // pop the last word
            first_part = word_array.join(' ');        // rejoin the first words together

            heading.html([first_part, ' <span class="last-word">', last_word, '</span>'].join(''));
        });
    });
</script>

Удачи.

Ответ 3

Нет, нет. В CSS существуют только ::first-letter и ::first-line. Все остальное должно выполняться вручную с помощью элемента (например, span).

Примечание: Планируется не ::first-word и ::last-word, по крайней мере, не в Селектора уровня 4 spec.

Ответ 4

CSS действительно не взаимодействует с текстом таким образом. он взаимодействует с элементами в дереве DOM. Добавление пролета вокруг этого слова является стандартным способом (который я видел, по крайней мере) для дифференциации текста. Просто используйте тег span, сопровождающий код будет благодарен вам за это.

Ответ 5

Нет. Селектор для определенных слов отсутствует, см. Селекторы Уровень 3: 2. Селектора.

Вы должны использовать тег span или запустить JavaScript, чтобы преобразовать каждое слово в диапазон, содержащий это слово.

Ответ 6

CSS работает с элементами... но вообще не по тексту или данным внутри элемента. Вы могли бы использовать Javascript, если хотите, чтобы работать с фактическим текстом внутри элементов.

Ответ 7

Нет, в CSS нет селектора, который ссылался бы на последнее (или первое) слово элемента. Есть псевдоэлементы для первой буквы и для первой строки, но слова должны быть обернуты в контейнеры, чтобы их стиль отдельно.

Ответ 8

CSS не знает о словах. Единственное, что существует: первая буква и первая строка. Конструкция, подобная слову и псевдоэлементу для последнего, не существует.

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

Если вы используете его для h1, вы должны иметь его так или иначе только один раз на странице.

Ответ 9

Взяв iblue, ответьте, но сделайте немного более разумным.

Используйте lettering.js со следующей настройкой:

$(document).ready(function() {
    $('h1').lettering('words');
});

Это разделит тэг <h1> на что-то вроде этого:

<h1>
    <span class="word1">Highlight</span>
    <span class="word2">the</span>
    <span class="word3">last</span>
    <span class="word4">word</span>
    <span class="word5">a</span>
    <span class="word6">different</span>
    <span class="word7">color</span>
</h1>

Конечно, мы не можем просто нацелиться на .word7, поскольку это может быть не последним, поэтому мы можем использовать псевдо-класс CSS :last-child.

h1 {
    color: #333;
}

h1 > span:last-child {
    color: #c09;
}

Теперь последнее слово отличается от другого. Посмотрите живой пример.

Единственное, о чем нужно быть осторожным, - поддержка :last-child

Ответ 10

Возможно, с селектором "после"

element1
{
    properties
    main
}

element1:after 
{
    content: "title";
    color: pickone;
}

Я рекомендую остаться с "span". Если вы не хотите иметь огромный css с этим дополнительным материалом, вы всегда можете сделать это в своем html:

<span style="color:#000;">text</span>