Принудительно вводить заглавные буквы в заголовок в CSS с помощью преобразования текста

Я создаю тему для CMS и имею только возможность изменять CSS, связанный со страницей (без Javascript, PHP и т.д.).

Есть ли способ изменить этот список пользователей, которые у нас есть:

ДЖОН СМИТ
ДАВИД ДЖОНС
...

в правильный заголовок (John Smith и т.д.) с использованием CSS?

text-transform: lowercase; работает нормально (john smith и т.д.), но text-transform: capitalize; ничего не делает (остается заглавной).


В соответствии с запросом, HTML:

<tr> [...] <td class="cell c1">ALEXANDER MULLER</td> [...] </tr>
<tr> [...] <td class="cell c1">JOHN SMITH</td> [...] </tr>

И CSS:

td {
    text-transform: capitalize;
}

Ответы

Ответ 1

text-transform: capitalize; изменяет только первую букву каждого слова, поэтому, если первая буква слова уже заглавная, текст-преобразование пропускает это слово.

Пример:

JoHN smith станет JoHN smith

Невозможно сделать обложку с использованием только CSS, если все ваши слова не имеют нижнего регистра.

Ответ 2

Мы можем использовать трюк, чтобы сделать это. Но следите за совместимостью с браузером. https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter

p{
  text-transform: lowercase;
 }

p:first-letter{
  text-transform: uppercase;
}

Например:

   это какой-то текст.   Это НЕКОТОРЫЙ текст.   это ТЕКСТ.

Выход → Это текст

Ответ 3

То, что вы переживаете, это то, как это работает. Это от спецификация:

" капитализировать. символ каждого слова в верхнем регистре; другие символы не затронуты".

Теперь вы можете сделать (я предполагаю, что у вас есть список с тегами <li> элементов списка:

li:first-letter {
    text-transform: uppercase;
}

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

John smith
David jones

Я не верю, что здесь есть чистое решение для CSS. Это сложно из-за таких имен, как Джон Маккейн, Оскар де ла Хойя, доктор Джон Смит, доктор Джейн Смит и люди, которые предпочитают вести себя в нижнем регистре, например, данах бойд или т.д. Каммингс. Всегда есть исключения, когда вы пытаетесь использовать Title Case. Эти исключения вызовут головные боли. Если у вас нет контроля над содержимым, содержимое даст вам головные боли.

Ответ 4

В вашей ситуации единственным способом, с которым я когда-либо работал, является использование javascript. Как утверждают другие ответы, преобразование capize не делает трюк.

Я думаю, что если это требование, вам нужно будет найти способ дезинформировать имена вверх по течению. Либо капитализируйте их правильно, либо преобразуйте их в нижний регистр, чтобы преобразование CSS работало должным образом.

Эндрю

Ответ 5

Я столкнулся с этой проблемой много раз, когда текст вошел в верхний регистр из CMS или базы данных. Я использую функцию jQuery.each для итерации по выбранным элементам, применяю метод javascript toLowerCase для каждого, а затем используйте CSS для установки text-transform: capize.

Работает каждый раз!

Ответ 6

Это показывает, что text-transform: capize работает для меня в IE, Chrome и FF для Windows:

http://www.tizag.com/cssT/text.php

Что вы используете, чтобы попробовать?

Ответ 7

Я знаю, что вопрос был только о CSS. Поскольку большинство представлений в настоящее время относятся к моделям, это может кому-то помочь.

   <div style="text-transform: capitalize;">
      {{ person.firstName.toLowerCase() }}
   </div>