CSS-преобразование текста используется на всех шапках

Вот мой HTML:

<a href="#" class="link">small caps</a> & 
<a href="#" class="link">ALL CAPS</a>

Вот мой CSS:

.link {text-transform: capitalize;}

Вывод:

Small Caps & ALL CAPS

и я хочу, чтобы результат был:

Small Caps & ALL CAPS

Любые идеи?

Ответ 1

Нет способа сделать это с помощью CSS, вы можете использовать PHP или Javascript для этого.

Пример PHP:

$text = "ALL CAPS";
$text = ucwords(strtolower($text)); // All Caps

Пример jQuery (теперь это плагин!):

// Uppercase every first letter of a word
jQuery.fn.ucwords = function() {
  return this.each(function(){
    var val = $(this).text(), newVal = '';
    val = val.split(' ');

    for(var c=0; c < val.length; c++) {
      newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length) + (c+1==val.length ? '' : ' ');
    }
    $(this).text(newVal);
  });
}

$('a.link').ucwords();​

Ответ 2

Вы можете почти сделать это с помощью:

.link { text-transform: lowercase; }
.link:first-letter { text-transform: uppercase; }

Он даст вам результат:

Small caps
All caps

Ответ 3

Интересный вопрос!

capitalize преобразует каждую первую букву слова в верхний регистр, но не преобразует другие буквы в нижний регистр. Даже псевдокласс класса :first-letter не будет вырезать его (потому что он применяется к первой букве каждого элемента, а не к каждому слову), и я не вижу способа комбинирования строчных букв и заглавных букв для получения желаемого результата.

Итак, насколько я вижу, это действительно невозможно сделать с CSS.

@Harmen показывает неплохие PHP и jQuery обходные пути в его ответе.

Ответ 4

Преобразование с использованием JavaScript с помощью .toLowerCase() и capitalize сделает все остальное.

Ответ 6

JavaScript:

var links = document.getElementsByClassName("link");
for (var i = 0; i < links.length; i++) {
  links[i].innerHTML = links[i].innerHTML.toLowerCase();
}

CSS

.link { text-transform: capitalize; }

То, что Хан "закончил делать" (которое чище и работает для меня), отсутствует в комментариях сообщения, помеченного как ответ.

Ответ 7

Может быть полезно для java и jstl.

  • Инициализировать переменную локализованным сообщением.
  • После этого его можно использовать в функции jstl toLowerCase.
  • Преобразование с помощью CSS.

В JSP

1.

<fmt:message key="some.key" var="item"/>

2.

<div class="content">
  <a href="#">${fn:toLowerCase(item)}</a>
</div>

В CSS

3.

.content {
  text-transform:capitalize;
}

Ответ 8

Если данные поступают из базы данных, как и в моем случае, вы можете опустить ее перед отправкой в ​​список выбора/выпадающего списка. Позор, вы не можете сделать это в CSS.

Ответ 9

Вы можете сделать это с помощью css first-letter! например, я хотел его для меню:

a {display:inline-block; text-transorm:uppercase;}
a::first-letter {font-size:50px;}

Он работает только с элементами блока - поэтому встроенный блок!

Ответ 10

После многого исследования я обнаружил функцию/выражение jquery для изменения текста в первой букве только в верхнем регистре, поэтому я модифицирую этот код, чтобы сделать его работоспособным для поля ввода. Когда вы напишете что-то в поле ввода, а затем перейдете к другому элементу или элементу, текст этого поля изменится только с 1-буквенной заглавной буквой. Независимо от типа текста пользователя в полной нижней или верхней заглавной букве:

Следуйте этому коду:

Шаг 1: вызовите библиотеку jquery в html head:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

Шаг-2: напишите код для изменения текста полей ввода:

<script>
$(document).ready(function(){
$("#edit-submitted-first-name,#edit-submitted-last-name,#edit-submitted-company-name, #edit-submitted-city").focusout(function(){
var str=$(this).val();
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
$(this).val(str);
 });});

 </script>

Шаг 3. Создайте поля ввода HTML с тем же идентификатором, который вы используете в коде jquery, например:

<input type="text" id="edit-submitted-first-name" name="field name">

Идентификатор этого поля ввода: edit-submitted-first-name (он используется в jquery-коде на этапе 2)

** Результат: Убедитесь, что текст изменится после перемещения фокуса из этого поля ввода в другом элементе. Потому что мы используем фокус из jQuery здесь. Результат должен выглядеть так: Тип пользователя: "спасибо", это изменится с "Спасибо". **

Желаем удачи

Ответ 11

link {text-transform: lowercase! important;}

ссылка: первая буква {text-transform: uppercase;}

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

Ответ 12

Я не смог прокомментировать Хармена из-за отсутствия репутации, так что снова написал тот же ответ. Я добавил LowerCase() в ответ, чтобы он мог преобразовать "ВСЕ CAPS" в "All Caps".

$.fn.ucwords = function() {
return this.each(function(){
var val = $(this).text(), newVal = '';
val = val.split(' ');

for(var c=0; c < val.length; c++) {newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length).toLowerCase() + (c+1==val.length ? '' : ' ');
}
$(this).text(newVal);  
});
 $('a.link').ucwords();​ 

Ответ 13

все не так, как есть → font-variant: small-caps;

текст-преобразования: капитализировать; только первая буква