Как предотвратить затемненное перекрытие текста с уменьшенным интервалом между буквами в html/css

Текст при наложении темнеет, как буквы «R» и «А». Я хочу либо быть сверху другого (или любым другим способом предотвратить это).

Мой код

.gradient-text-wrapper {
  position: relative;
  display: inline-block;
  text-transform: uppercase;
  font-family: 'Arial', sans-serif;
}

.gradient-text {
  font-size: 10rem;
  font-weight: bold;
  background: linear-gradient(86deg, #FBFF6B 15.27%, #D66A6A 51.02%, #A600F4 99.78%);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: rgba(255, 0, 0, 0.18);
  position: relative;
  z-index: 1;
  mix-blend-mode: lighten;
  letter-spacing: -1.1rem;
}

.centered {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
<div class = "centered">
  <div class = "gradient-text-wrapper">
    <span class = "gradient-text">Gradient</span>
  </div>
</div>

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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
75
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Чтобы предотвратить эффект затемнения перекрывающихся частей букв, сохраняя при этом градиент и полупрозрачную заливку текста, вы можете использовать комбинацию псевдоэлементов ::before и непрозрачности для достижения более чистого результата. Этот метод предполагает наложение непрозрачной версии текста на полупрозрачную.

Не могли бы вы рассказать об этом подробнее, пожалуйста?

Samay Jain 29.07.2024 06:10

Вы можете, например, использовать mix-blend-mode:screen;. Я также предполагаю, что пробелы между буквами сделаны намеренно...

.gradient-text-wrapper {
  position: relative;
  display: inline-block;
  text-transform: uppercase;
  font-family: 'Arial', sans-serif;
}

.gradient-text {
  font-size: 10rem;
  font-weight: bold;
  background: linear-gradient(86deg, #FBFF6B 15.27%, #D66A6A 51.02%, #A600F4 99.78%);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  position: relative;
  z-index: 1;
  mix-blend-mode: screen;
  letter-spacing: -1.1rem;
}

.centered {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
<div class = "centered">
    <div class = "gradient-text-wrapper">
      <span class = "gradient-text">Gradient</span>
    </div>
</div>
Ответ принят как подходящий

В зависимости от того, какой браузер вам нужно поддерживать, вы можете использовать Color-mix в градиенте, чтобы смешивать цвета вместо того, чтобы накладывать на них прозрачность.

.gradient-text-wrapper {
  position: relative;
  display: inline-block;
  text-transform: uppercase;
  font-family: 'Arial', sans-serif;
}

.gradient-text {
  font-size: 10rem;
  font-weight: bold;
  --color: rgba(255, 0, 0);
  --weight: 18%;
  background: linear-gradient( 86deg, color-mix(in srgb, var(--color) var(--weight), #FBFF6B) 15.27%, color-mix(in srgb, var(--color) var(--weight), #D66A6A) 51.02%, color-mix(in srgb, var(--color) var(--weight), #A600F4) 99.78%);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  position: relative;
  z-index: 1;
  mix-blend-mode: lighten;
  letter-spacing: -1.1rem;
}

.centered {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
<div class = "centered">
  <div class = "gradient-text-wrapper">
    <span class = "gradient-text">Gradient</span>
  </div>
</div>

Вы можете просто использовать mix-blend-mode вместо background-clip. (с тех пор, как Firefox еще не поддерживал фоновый клип:текст)

вот идея с фоновым изображением на html:

.gradient-text-wrapper {
  display: inline-block;
  text-transform: uppercase;
  font-family: "Arial", sans-serif;
  background: linear-gradient( 86deg, #fbff6b 15.27%, #d66a6a 51.02%, #a600f4 99.78%);
  mix-blend-mode: multiply;  /* here picked up to mix with html background, up to your choice  */
}

.gradient-text {
  display: block;
  font-size: clamp(40px, 18vw, 10rem);/* for the demo, make it fully visible inside snippet */
  padding-inline: 0 .5em;  /* > negative letter-spacing, to increase with text lenght */
  font-weight: bold;
  background: white;
  mix-blend-mode: lighten;
  letter-spacing: -.11em; /* for demo keep the ratio */
}


/* demo */

html {
  min-height: 100vh;
  display: grid;
  place-content: center;
  background: url(https://picsum.photos/id/46/3264/2448) center / cover;
}
<div class = "gradient-text-wrapper">
  <span class = "gradient-text">Gradient</span>
</div>

Также можно добавить полупрозрачную тень к тексту https://codepen.io/gc-nomade/pen/gONLBjx


Обратите внимание, что метод смешивания цветов, на мой взгляд, здесь наиболее эффективен.

Интересно, почему вы вообще пытаетесь его улучшить? Поскольку сюда приходят случайные парни и минусуют правильные ответы... я дам вам очко за ваши сизифовы усилия...

Łukasz D. Mastalerz 28.07.2024 15:03

@ŁukaszD.Mastalerz ради развлечения хотел протестировать этот фильтр: часто выдает ошибки в Firefox... SO также является хорошим местом для отзывов;)

G-Cyrillus 28.07.2024 15:06

@ŁukaszD.Mastalerz метод смешивания цветов сработал так, как задумано, поскольку мне тоже нужна была полупрозрачная заливка текста!

Samay Jain 29.07.2024 06:12

@SamayJain Ты не совсем понял, что я имел в виду, приятель. Прежде всего я имел в виду, что коллега @G-Cyrillus пытался отредактировать/исправить/улучшить свой пост и единственным человеком, который его за это оценил, был я, и несмотря на его (сизифовы) старания, вы приняли другое (тоже правильное) ) отвечать. Также по непонятным причинам раскритиковали только мой без комментариев, хотя он был первым и правильным. Ко всем трем нашим ответам можно easily добавить полупрозрачность. Но на Meta-SE есть много тем о случайном или злонамеренном отрицательном голосовании, и есть более широкая проблема.

Łukasz D. Mastalerz 29.07.2024 09:41

 .gradient-text-wrapper {
      position: relative;
      display: inline-block;
      text-transform: uppercase;
      font-family: 'Arial', sans-serif;
    }

    .gradient-text {
      font-size: 10rem;
      font-weight: bold;
      background: linear-gradient(86deg, #FBFF6B 15.27%, #D66A6A 51.02%, #A600F4 99.78%);
      background-clip: text;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      position: relative;
      z-index: 1;
      letter-spacing: -0.5rem; 
    }

    .centered {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }

    .overlay {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 2;
      color: rgba(255, 0, 0, 0.18);
    }
<div class = "centered">
    <div class = "gradient-text-wrapper">
      <span class = "gradient-text">Gradient</span>
      <span class = "overlay">Gradient</span>
    </div>
  </div>

Другие вопросы по теме