Прозрачное зачеркивание текста

518
19 февраля 2017, 10:31

Мне нужно реализовать прозрачное зачеркивание текста с помощью CSS, поэтому не придется заменять тег <H1> на тега <IMG>.
Мне удалось реализовать линии через текст с помощью CSS, но я не могу сделать его прозрачным.

Желаемый эффект:

Вот мой код:

body{
    background: url(http://lorempixel.com/output/people-q-c-640-480-1.jpg);
    background-size:cover;
}
h1{
    font-family:arial;
    position:relative;
    display:inline-block;
}
h1:after{
    content:'';
    position:absolute;
    width:100%;
    height:2px;
    left:0; top:17px;
    background:#fff;
}    

html

<h1>EXAMPLE</h1>    

Как я могу реализовать прозрачное зачеркивание моего текста, которое позволяет в фоновом режиме появляться в этой строке. @Kael

комментарии:

это образ, который, скорее всего, создан в Illustrator, где был обтравочной маской, использованный для "вырезания" этой линии по всему тексту, позволяя тем самым видеть фон за ним. Не может быть сделано в HTML и CSS – @Chris M

@Chris M думал, что "cut out" эффект часто не достижим с помощью CSS,

это одно. – @web-tiki

@веб-тики ОК, я думаю, технически, вы выполняли его с хаком. Ты на самом деле пишешь два слова для отрезание частей. Я не понимаю, почему line-height:0 сдвигает текст вверх, показывая нижнюю половину вместо верхней. – @Chris M

@ChrisM ну это все зависит от того, что вы считаете халтурой. Код CSS/HTML является действительным, согласно стандарта W3, в моей реализации. Текст показывает только нижнюю часть, именно из-за line-height:0, это вертикально центрирует текст в верхней части контейнера и, как я установил overlow:hidden в контейнере, только в нижней части текста. – @web-tiki

ага! Я буду играть с line-height. это не правило, я очень часто использовал. Я думаю, когда применяют line-height:0 вcё его содержимое полностью исчезает. Очевидно, что это не так. @Chris M

@ChrisM не скрывает его полностью, потому что я задаю высоту элемента. overflow:hidden; свойство прячет в зависимости от высоты, но не в зависимости от line-height @web-tiki

Источник: transparent strikethrought on text

Answer 1

body { 
  background: url(https://i.ytimg.com/vi/tntOCGkgt98/maxresdefault.jpg); 
  background-size: cover; 
} 
 
h1 { 
  font-size: 100px; 
  position: relative; 
  margin-top: 1.6em; 
} 
 
h1 span { 
  opacity: 0; 
  display: inline-block; 
  font-size: inherit; 
} 
 
h1:after, 
h1:before { 
  position: absolute; 
  left: 0; 
  top: 0; 
  content: attr(data-text); 
  overflow: hidden; 
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 47%, 0% 47%); 
  clip-path: polygon(0% 0%, 100% 0%, 100% 47%, 0% 47%); 
} 
 
h1:after { 
  content: attr(data-text); 
  top: auto; 
  bottom: 0; 
  -webkit-clip-path: polygon(0% 53%, 100% 53%, 100% 100%, 0% 100%); 
  clip-path: polygon(0% 53%, 100% 53%, 100% 100%, 0% 100%); 
}
<h1 data-text="TEXT"><span>TEXT</span></h1>

Answer 2

Вы можете достичь прозрачного перечеркивания текста только с помощью CSS с использованием line-height и overflow:hidden свойств.

Demo : CSS transparent strike through

Скриншот примера:

Объяснение :

  1. Шаг 1 : спрятать нижнюю часть текста тега <H1> height:0.52em; overflow:hidden; использовать em units так, что высота подстраивается под размер шрифта для тега <h1>
    fiddle
  2. Шаг 2 : "rewrite" содержание в псевдо-элемента, чтобы минимизировать разметки и предотвратить повторение контента. Вы можете использовать custom данные атрибута для того, чтобы сохранить все содержимое в разметке и поэтому не нужно будет редактировать CSS для каждого заголовка.
    fiddle
  3. Шаг 3 : выровняйте псевдо текстовый элемент в верх, только ту часть, которая внизу показана line-height:0;
    fiddle

код примера:

body{ 
    background: url(http://lorempixel.com/output/people-q-c-640-480-1.jpg); 
    background-size:cover; 
} 
h1{ 
    font-family:arial; 
    position:relative; 
} 
h1 span, h1:after{ 
    display:inline-block; 
    height:0.52em; 
    overflow:hidden; 
    font-size:5em; 
} 
 
h1:after{ 
    content: attr(data-content);    
    line-height:0; 
    position:absolute; 
    top:100%; left:0; 
}
<h1 data-content="EXAMPLE" ><span>EXAMPLE</span></h1>

ответил: web-tiki

Answer 3

Вариант с применением SVG

Другой подход для этого эффекта является использование SVG с элементом маски.

Пример соответствующего кода на codepen

*{margin:0;padding:0;} 
html,body{height:100%;} 
body{background: url(https://farm8.staticflickr.com/7140/13689149895_0cce1e2292_o.jpg) center bottom; background-size:cover;text-align:center;} 
svg{ 
  text-transform:uppercase; 
  color:darkorange; 
  background: rgba(0,0,0,0.5); 
  margin-top:5vh; 
  width:85%; 
  padding:0; 
}
<svg viewbox="0 0 100 13"> 
  <defs> 
    <mask id="strike"> 
      <rect x="0" y="0" width="100" height="13" fill="#fff" /> 
      <rect x="0" y="5" width="100" height="1" /> 
    </mask> 
  </defs> 
  <text id="text1" x="50" y="8.5" font-size="7" text-anchor="middle" fill="darkorange" mask="url(#strike)">SVG strike through</text> 
</svg>

ответил: web-tiki

READ ALSO
Операторы перегрузки

Операторы перегрузки

Доброго времени суток! Можете понятно объяснить про перегрузку операторов? Нужно создать класс для представления простой дроби, с чем я справилась,...

410
printf как средство печати переменных в С

printf как средство печати переменных в С

Я не знаю как точно сформулировать то, что я хочу спросить, но выглядит это следующим образом:

585
Передать в метод объект класса T

Передать в метод объект класса T

Всем приветЯ реализую класс списка

366