CSS для выбора / стиля первого слова

Этот меня как бы поставил в тупик. Я хочу сделать первое слово всех абзацев в моем div #content размером 14pt вместо значения по умолчанию для абзацев (12pt). Есть ли способ сделать это в прямом CSS, или я должен обернуть первое слово в диапазоне, чтобы выполнить это?

Пример: medium.com/china-media-project/…

Pacerier 25.04.2016 23:32
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
76
1
171 163
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Для этого вам нужно заключить слово в диапазон.

Ответ принят как подходящий

Вы ищете псевдоэлемент, которого не существует. Есть: first-letter и: first-line, но нет: first-word.

Конечно, вы можете сделать это с помощью JavaScript. Вот код, который я нашел, что делает это: http://www.dynamicsitesolutions.com/javascript/first-word-selector/

Почему бы им не указать: first-word в спецификации?

alex 17.03.2009 03:25

Вероятно, потому что «слово» не является четко определенным понятием в языке макета. Одно или два слова "полусырые"? А как насчет «Макдональдса» и «О'Ши»? Какое первое слово в словах «5 + 3 = 8» или «5 + 3 = 8»?

Robby Slaughter 20.05.2009 03:36

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

Henrik Erlandsson 20.04.2011 13:10

Регулярное выражение @Robby Slaughter отлично справляется с \ d и \ w

FMaz008 01.08.2011 22:57

Между словами китайских иероглифов нет пробелов.實際上, 漢字 沒有 單詞 和 字母 的 概念.

deerchao 10.05.2012 19:47

@RobbySlaughter CSS уже определяет понятие «слова» (по крайней мере, для латинских буквенных символов) с тех пор, как существует text-transform: capitalize: jsfiddle.net/mlms13/DRJ76

Michael Martin-Smucker 25.06.2012 19:35

То, что это немного сложно определить, не означает, что этого не следует делать. Но это обычный CSS ...

Jonathan. 14.08.2012 15:26

«Слово» очень хорошо определяется в браузерах. Реализация: first-word просто будет использовать ту же логику, что и разрывы строк.

Lachlan Arthur 11.09.2012 08:22

должен уметь сказать, сколько первых слов. слово: все буквы перед пробелом. как p:first-word(3){} так = this is selected это не

Muhammad Umer 06.08.2013 08:14

Должны иметь все стандартные селекторы :nth-word(3n+1), :last-word, :first-word и делать то же самое для букв. Хотя у нас есть :first-letter, у нас также должны быть :last-letter и :nth-letter(3n+1).

Robert McKee 26.03.2014 00:51

@RobbySlaughter - в большинстве случаев лучше поддерживать, чем не поддерживать вообще, поэтому утверждение о том, что «слово» не является четко определенным понятием, не имеет большого значения. Они могли бы определить это за минуту и ​​добавить поддержку, не обязательно быть идеальным.

vsync 15.06.2016 11:04

@RobbySlaughter Это фейковые новости! Компьютеры знают, что такое слово, и они завоюют мир.

Arnaldo Capo 18.10.2017 18:10

Сейчас 2018 год, и у нас все еще нет этой функции в CSS

RozzA 14.02.2018 00:12

Используйте элемент сильный, его цель:

<div id = "content">
    <p><strong>First Word</strong> rest of paragraph.</p>
</div>

Затем создайте для него стиль в своей таблице стилей.

#content p strong
{
    font-size: 14pt;
}

Парадоксально, что ваше «Первое слово» на самом деле состоит из двух слов! ;)

Bobby Jack 11.09.2008 14:52

Да, я думал о том же, когда писал ответ.

Dale Ragan 11.09.2008 20:49

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

Akoi Meexx 04.03.2010 17:43

Плуз, если вы хотите использовать сильный где-нибудь еще в контенте, он будет больше. Лучше всего классифицировать этого плохого парня и нацеливаться более прямо.

Adrian Lynch 25.10.2010 14:52

<strong class = "first-word"> ??

Eric Wolf 27.12.2013 09:28

На основе спецификация считаю <b> более подходящим.

mattsoave 26.01.2014 11:51

Для этого не существует простого метода CSS. Возможно, вам придется использовать JavaScript + Regex, чтобы всплывать в диапазоне.

В идеале для первого слова должен быть псевдоэлемент, но вам не повезло, поскольку это не работает. У нас есть: first-letter и: first-line.

Вы можете использовать комбинацию: after или: before, чтобы добраться до него без использования диапазона.

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

В идеале вы могли бы сделать это с помощью псевдокласса и вашей таблицы стилей, но поскольку это невозможно, вам следует сделать свою разметку семантически правильной и использовать <span class = "first-word">.

Ответ javascript, принятый как правильный, потенциально более полезен, но я считаю, что этот ответ является наиболее семантически правильным.

Reynolds 21.12.2009 19:35

FWIW, элемент <b> может быть подходящим. Спецификация HTML5 говорит: Элемент b представляет собой отрезок текста, на который обращено внимание в утилитарных целях, без передачи какой-либо дополнительной важности и без указания альтернативного голоса или настроения, например, ключевые слова в аннотации документа, названия продуктов в обзоре, слова, требующие действий в интерактивном текстовом программном обеспечении или статья lede. (курсив мой) Первое слово - не совсем статья, но его функция та же.

mattsoave 26.01.2014 11:49

Очень мило, @mattsoave. Я еще не видел переопределения <b> в html5, так что это очень интересно. Я сохраню это в своей сумке уловок в следующий раз, когда мне понадобится стилизованный элемент без реального семантического значения.

Prestaul 28.01.2014 21:15

@mattsoave - я знаю, что прошло 5+ лет, но я заметил, как stackoverflow использует элемент b для вашего акцента :-)

Herbert Van-Vliet 16.12.2019 01:59

То же самое и с jQuery:

$('#links a').each(function(){
    var me = $(this);
    me.html( me.text().replace(/(^\w+)/,'<strong></strong>') );
  });

или же

$('#links a').each(function(){
    var me = $(this)
       , t = me.text().split(' ');
    me.html( '<strong>'+t.shift()+'</strong> '+t.join(' ') );
  });

(Через «Виззуд» на Список рассылки jQuery)

Похоже, лучшее решение для меня. Кстати: это не сработает, т.е. словацкие персонажи, такие как "Zimná záhrada". Поэтому вместо этого я использовал это регулярное выражение: "([^ \ s] +)"

debute 23.02.2016 17:01

Решение на чистом CSS:

Используйте псевдокласс: first-line.

display:block;
Width:40-100px; /* just enough for one word, depends on font size */
Overflow:visible; /* so longer words don't get clipped.*/
float:left; /* so it will flow with the paragraph. */
position:relative; /* for typeset adjustments. */

Не проверял. Уверен, что это сработает для вас. Раньше я применял правила блокировки к псевдоклассам. У вас может быть фиксированная ширина для каждого первого слова, так выравнивание текста: центр; и придайте ему красивый фон или что-то, чтобы справиться с негативным пространством.

Надеюсь, это сработает для вас. :)

-Motekye

1) Это псевдоэлемент 2) Это первый линия.

BoltClock 23.11.2011 18:29

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

Motekye Guakein 23.11.2011 20:37

Идея очень креативная, но перед публикацией ее следует протестировать. Это не работает - и не может работать, потому что display игнорируется в ::first-line (developer.mozilla.org/de/docs/Web/CSS/::first-line).

wortwart 14.01.2015 17:17

Достаточно широкое «на одно слово»? Это смешно, ведь слово может состоять из 1 или 15 букв.

jbyrd 23.03.2017 19:48

Вот немного JavaScript и jQuery, которые я собрал вместе, чтобы обернуть первое слово каждого абзаца тегом <span>.

$(function() {
    $('#content p').each(function() {
        var text = this.innerHTML;
        var firstSpaceIndex = text.indexOf(" ");
        if (firstSpaceIndex > 0) {
            var substrBefore = text.substring(0,firstSpaceIndex);
            var substrAfter = text.substring(firstSpaceIndex, text.length)
            var newText = '<span class = "firstWord">' + substrBefore + '</span>' + substrAfter;
            this.innerHTML = newText;
        } else {
            this.innerHTML = '<span class = "firstWord">' + text + '</span>';
        }
    });
});

Затем вы можете использовать CSS для создания стиля для .firstWord.

Он не идеален, поскольку не учитывает все типы пробелов; однако я уверен, что он может добиться того, что вам нужно, с помощью нескольких настроек.

Имейте в виду, что этот код будет выполняться только после загрузки страницы, поэтому может потребоваться доля секунды, чтобы увидеть эффект.

К сожалению, даже с подобными CSS 3 у нас все еще нет подобных :first-word, :last-word и т. д., Использующих чистый CSS. К счастью, в настоящее время есть почти JavaScript для всего, что подводит меня к моей рекомендации. Используя nthEverything и jQuery, вы можете расширить традиционные псевдоэлементы.

В настоящее время допустимые псевдонимы:

  • :first-child
  • :first-of-type
  • :only-child
  • :last-child
  • :last-of-type
  • :only-of-type
  • :nth-child
  • :nth-of-type
  • :nth-last-child
  • :nth-last-of-type

И используя nth Everything, мы можем расширить это до:

  • ::first-letter
  • ::first-line
  • ::first-word
  • ::last-letter
  • ::last-line
  • ::last-word
  • ::nth-letter
  • ::nth-line
  • ::nth-word
  • ::nth-last-letter
  • ::nth-last-line
  • ::nth-last-word

Вставьте тег Span в текст абзаца. Например- <p><span>Hello</span>My Name Is Dot</p а затем стилизуйте первую букву.

OP запрашивает селектор. В его вопросе говорилось: «Есть ли способ сделать это в прямой CSS» [выделено мной].

VorganHaze 17.08.2020 02:27

Простой способ сделать с HTML + CSS:

TEXT A <b>text b</b>

<h1>text b</h1>

<style>
    h1 { /* the css style */}
    h1:before {content:"text A (p.e.first word) with different style";    
    display:"inline";/* the different css style */}
</style>

Другие вопросы по теме