为什么 Css text-transform capitalize 不起作用?

Why Css text-transform capitalize not working?

我有一个示例文本,全部大写。我想将其设为大写文本,但 css 文本转换不起作用。我该怎么做?

span,
a,
h2 {
  text-transform: capitalize !important;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>

<span class="ml-5 mt-5 d-block">IT IS AN EXAMPLE TEXT</span>

<h2><a class="ml-5 mt-5 d-block" href="#">IT IS AN EXAMPLE TEXT IN HREF</a></h2>

你可以签到JSFiddle

我想要所有单词的首字母大写,其他字母小写。像这样:

It Is An Example Text

大写只影响单词的首字母。它不会改变单词中其余字母的大小写。例如,如果您将一个已经全部大写的单词大写,则该单词中的其他字母不会切换为小写。当您的文本包含不应包含任何小写字母的首字母缩略词或缩写时,这很好。

如果您将提供的文本更改为小写,您会发现它工作得很好!

但为了回答完整,我会尝试找到一种方法,无论输入如何,都能以所需的方式进行资本化。

似乎仅使用 CSS 是不可能的,如果您不将每个单词包装在不同的元素中,则对于单个单词文本旁边的内容。

单个单词片段

span,
a,
h2 {
   text-transform:lowercase
}

span:first-letter,
a:first-letter,
h2:first-letter {
  text-transform: capitalize;
}

span,
a,
h2 {
  text-transform: lowercase !important;
}
span:first-letter,
a:first-letter,
h2:first-letter {
  text-transform: capitalize !important;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>

<span class="ml-5 mt-5 d-block">IT IS AN EXAMPLE TEXT</span>

<h2><a class="ml-5 mt-5 d-block" href="#">IT IS AN EXAMPLE TEXT IN HREF</a></h2>

CSS text-transform: capitalize 只会影响第一个字符。

根据 specs:

capitalize Puts the first character of each word in uppercase; other characters are unaffected.

我强烈建议只编辑内容。请记住,归根结底,css 等技术只是解决问题的一种方法。同样,更好的解决方案是编辑该内容并将其大写,无论是存储在数据库中还是只是标记中的静态内容。


作为 hack(如果你真的想使用代码级解决方案),你可以使用 JavaScript 将所有字母首先转换为小写。然后使用 /\b(\w)/g 匹配第一个字母的实例,然后在每个

上使用 toUpperCase()

document.querySelector("a").innerText = document.querySelector("a").innerText.toLowerCase().replace(/\b(\w)/g, x => x.toUpperCase());
<h2><a class="ml-5 mt-5 d-block" href="#">IT IS AN EXAMPLE TEXT IN HREF</a></h2>

我编辑了他们的答案,将大写应用于第一行的所有第一个字母。

span,
a,
h2 {
  text-transform: lowercase;
}
span:first-line,
a:first-line,
h2:first-line {
  text-transform: capitalize;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>

<span class="ml-5 mt-5 d-block">IT IS AN EXAMPLE TEXT</span>

<h2><a class="ml-5 mt-5 d-block" href="#">IT IS AN EXAMPLE TEXT IN HREF</a></h2>

我的解决方案是同时使用 JavaScript 和 CSS。

CSS :

#text { text-transform: capitalize} 

Javascript:

document.getElementById("text").innerHtml = document.getElementById("text").innerHtml.toLowerCase()

JavaScript 将首先强制所有内容小写,然后 CSS 将应用文本大写。