Изменение размера текста и цвета поэтапно

Я хочу знать, можно ли изменить размер текста и цвет поэтапно в той же строке, например:

enter image description here

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

Ответы

Ответ 1

Как насчет какой-то трансформации и градиента без этой разметки:

body {
  perspective: 250px;
  perspective-origin: bottom;
}

div {
  font-size: 70px;
  background: linear-gradient(to right, black,rgba(0,0,0,0.3),rgba(0,0,0,0.2));
  display: inline-block;
  background-clip: text;
  color: transparent;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  transform: rotateY(70deg);
  transform-origin: left;
}
<div>
  Lorem Ipsum Lorem
</div>

Ответ 2

Это действительно зависит от вашей разметки HTML. Вы не можете сделать это с помощью обычного текста "Lorem ipsum", но вы можете это сделать, если каждая буква обернута в отдельный отдельный элемент довольно просто:

body > span {
  font-size: 72px;
}

span > span {
  font-size: 85%;
  opacity: 0.8;
}
<span>
  L<span>
    o<span>
      r<span>
        e<span>
          m <span>
            i<span>
              p<span>
                s<span>
                  u<span>
                    m
                  </span>
                </span>
              </span>
            </span>
          </span>
        </span>
      </span>
    </span>
  </span>
</span>

Ответ 3

Используя Джеймса Доннелли, ответьте немного JS:

format = ([head, ...tail]) => {
    if(tail.length == 0)
        return "<span>" + head + "</span>";
    return "<span>" + head + format(tail) + "</span>";
}

var el = document.querySelector(".test");

el.innerHTML = format(el.innerText)
.test > span {
    font-size: 72px;
}

span > span {
    font-size: 85%;
    opacity: 0.8;
}
<div class="test">
    Lorem ipsum
</div>

Ответ 4

вдохновил @James Доннелли ответить

это решение более динамичное, промежутки будут генерироваться с помощью javascript

проверить код

document.addEventListener('DOMContentLoaded', function()
{ 
    var fooDiv = document.getElementsByClassName("foo")[0];
    var text = fooDiv.innerHTML.trim();
    var textToSpans = "";
    var textLength = text.length;
    for(var i=0;i<textLength;i++){
        textToSpans += "<span>" + text[i];
    }

    for(i=0;i<textLength;i++){
        textToSpans += "</span>";
    }
    fooDiv.innerHTML = textToSpans;

    //change the class so if this code run again this div will not effected
    fooDiv.className = "bar";

}, false);
.bar > span {
    font-size: 72px;
}

span > span {
    font-size: 85%;
    opacity: 0.8;
}
<div class="foo">
    Lorem ips
</div>

Ответ 5

var GradientLetters = class {
  constructor(id, fontSizeStep) {
    this.element = document.getElementById(id);
    this.fontSizeStep = fontSizeStep;  
    this.letters = document.getElementById(id).innerText.split("");
    document.getElementById(id).innerText = "";
    this.makeGradient();
  }
  makeGradient() {
    this.letters.forEach((currentValue, index) => {
      let span = document.createElement("SPAN");
      span.innerText = currentValue;
      span.style.color = "rgba(0, 0, 0, " + (1 / index) + ")";
      span.style.fontSize = 60 - (index * 2) + "px";
      this.element.appendChild(span);
		});
  }
}
let gradientLetters = new GradientLetters("gradient-letters", 10);
p {
  font-family: Arial;
}
<p id="gradient-letters">Lorem ip</p>