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






Для этого вам нужно заключить слово в диапазон.
Вы ищете псевдоэлемент, которого не существует. Есть: first-letter и: first-line, но нет: first-word.
Конечно, вы можете сделать это с помощью JavaScript. Вот код, который я нашел, что делает это: http://www.dynamicsitesolutions.com/javascript/first-word-selector/
Почему бы им не указать: first-word в спецификации?
Вероятно, потому что «слово» не является четко определенным понятием в языке макета. Одно или два слова "полусырые"? А как насчет «Макдональдса» и «О'Ши»? Какое первое слово в словах «5 + 3 = 8» или «5 + 3 = 8»?
Для целей макета определение слова как «группа непробельных символов, следующих за пробельными символами и предшествующих им» является хорошим и очень полезным. Для обработки вам, возможно, придется быть «вдумчивым», но для верстки это отличное решение.
Регулярное выражение @Robby Slaughter отлично справляется с \ d и \ w
Между словами китайских иероглифов нет пробелов.實際上, 漢字 沒有 單詞 和 字母 的 概念.
@RobbySlaughter CSS уже определяет понятие «слова» (по крайней мере, для латинских буквенных символов) с тех пор, как существует text-transform: capitalize: jsfiddle.net/mlms13/DRJ76
То, что это немного сложно определить, не означает, что этого не следует делать. Но это обычный CSS ...
«Слово» очень хорошо определяется в браузерах. Реализация: first-word просто будет использовать ту же логику, что и разрывы строк.
должен уметь сказать, сколько первых слов. слово: все буквы перед пробелом. как p:first-word(3){} так = this is selected это не
Должны иметь все стандартные селекторы :nth-word(3n+1), :last-word, :first-word и делать то же самое для букв. Хотя у нас есть :first-letter, у нас также должны быть :last-letter и :nth-letter(3n+1).
@RobbySlaughter - в большинстве случаев лучше поддерживать, чем не поддерживать вообще, поэтому утверждение о том, что «слово» не является четко определенным понятием, не имеет большого значения. Они могли бы определить это за минуту и добавить поддержку, не обязательно быть идеальным.
@RobbySlaughter Это фейковые новости! Компьютеры знают, что такое слово, и они завоюют мир.
Сейчас 2018 год, и у нас все еще нет этой функции в CSS
Используйте элемент сильный, его цель:
<div id = "content">
<p><strong>First Word</strong> rest of paragraph.</p>
</div>
Затем создайте для него стиль в своей таблице стилей.
#content p strong
{
font-size: 14pt;
}
Парадоксально, что ваше «Первое слово» на самом деле состоит из двух слов! ;)
Да, я думал о том же, когда писал ответ.
За исключением того, что strong в этом случае семантически неверен. Похоже, что размер - это просто проблема стиля, и сильный указывает на то, что затронутый раздел должен быть подчеркнут.
Плуз, если вы хотите использовать сильный где-нибудь еще в контенте, он будет больше. Лучше всего классифицировать этого плохого парня и нацеливаться более прямо.
<strong class = "first-word"> ??
На основе спецификация считаю <b> более подходящим.
Для этого не существует простого метода CSS. Возможно, вам придется использовать JavaScript + Regex, чтобы всплывать в диапазоне.
В идеале для первого слова должен быть псевдоэлемент, но вам не повезло, поскольку это не работает. У нас есть: first-letter и: first-line.
Вы можете использовать комбинацию: after или: before, чтобы добраться до него без использования диапазона.
Я должен не согласиться с Дейлом ... Сильный элемент - это на самом деле неправильный элемент для использования, что подразумевает что-то о значении, использовании или акцентировании контента, в то время как вы просто намереваетесь придать стиль элементу.
В идеале вы могли бы сделать это с помощью псевдокласса и вашей таблицы стилей, но поскольку это невозможно, вам следует сделать свою разметку семантически правильной и использовать <span class = "first-word">.
Ответ javascript, принятый как правильный, потенциально более полезен, но я считаю, что этот ответ является наиболее семантически правильным.
FWIW, элемент <b> может быть подходящим. Спецификация HTML5 говорит: Элемент b представляет собой отрезок текста, на который обращено внимание в утилитарных целях, без передачи какой-либо дополнительной важности и без указания альтернативного голоса или настроения, например, ключевые слова в аннотации документа, названия продуктов в обзоре, слова, требующие действий в интерактивном текстовом программном обеспечении или статья lede. (курсив мой) Первое слово - не совсем статья, но его функция та же.
Очень мило, @mattsoave. Я еще не видел переопределения <b> в html5, так что это очень интересно. Я сохраню это в своей сумке уловок в следующий раз, когда мне понадобится стилизованный элемент без реального семантического значения.
@mattsoave - я знаю, что прошло 5+ лет, но я заметил, как stackoverflow использует элемент b для вашего акцента :-)
То же самое и с 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] +)"
Решение на чистом 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) Это первый линия.
Идея состоит в том, чтобы сделать первую строку достаточно широкой для одного слова, разместить ее так, чтобы она проходила вместе с остальным текстом, а затем применить стили. Боже.
Идея очень креативная, но перед публикацией ее следует протестировать. Это не работает - и не может работать, потому что display игнорируется в ::first-line (developer.mozilla.org/de/docs/Web/CSS/::first-line).
Достаточно широкое «на одно слово»? Это смешно, ведь слово может состоять из 1 или 15 букв.
Вот немного 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» [выделено мной].
Простой способ сделать с 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>
Пример: medium.com/china-media-project/…