CSS зачеркивает другой цвет от текста?



элементы HTML del,strike или s все они могут быть использованы для текстового эффекта зачеркивания. Примеры:



<del>del</del>


....дает: del



<strike>strike</strike> and <s>strike</s>


....дает: удар и удар



CSS text-decoration свойство со значением line-through может использоваться аналогично. Код...



<span style='text-decoration:line-through'>
text-decoration:line-through
</span>


...также рендеринг будет выглядеть так: text-decoration: line-through



однако зачеркнутая строка обычно имеет тот же цвет, что и текст.



можно ли использовать CSS, чтобы сделать линию другого цвета?

546   11  

11 ответов:

да, добавив дополнительный элемент упаковки. Назначьте нужный цвет строки для внешнего элемента, а затем нужный цвет текста для внутреннего элемента. Например:

<span style='color:red;text-decoration:line-through'>
  <span style='color:black'>black with red strikethrough</span>
</span>

...или...

<strike style='color:red'>
  <span style='color:black'>black with red strikethrough<span>
</strike>

(заметим, однако, что <strike> - это считается устаревшим в HTML4 и устаревшим в HTML5 (Смотрите также W3.org). рекомендуется использовать<del> если истинный смысл удаления назначению, или иным образом использовать <s> элемент или стиль с text-decoration CSS как в первом примере.)

чтобы зачеркивание появилось для a: hover, явной таблицы стилей (объявленной или указанной в <HEAD>) должны быть использованы. (Тег :hover псевдокласс не может быть применен со встроенными атрибутами стиля.) Например:

<head>
  <style>
    a.redStrikeHover:hover {
      color:red;
      text-decoration:line-through;
    }
  </style>
</head>
<body>
  <a href='#' class='redStrikeHover'>
    <span style='color:black'>hover me</span>
  </a>
</body>
(IE7, кажется, требует некоторых href установить на <a> до :hover имеет эффект; FF и браузеры на основе WebKit этого не делают.)

по состоянию на февраль. 2016, CSS 3 имеет поддержку, упомянутую ниже. Вот фрагмент из одной страницы продукта WooCommerce с ценовой скидкой

/*Price before discount on single product page*/
body.single-product .price del .amount {
color:           hsl(0, 90%, 65%);
font-size:       15px;
text-decoration: line-through;
/*noinspection CssOverwrittenProperties*/
text-decoration: white double line-through; /* Ignored in CSS1/CSS2 UAs */
}

в результате: Text decoration example


CSS 3, скорее всего, будет иметь прямую поддержку с помощью text-decoration-color свойства. В частности:

The text-decoration-color свойство CSS задает цвет, используемый при рисовании подчеркиваний, надстроек или зачеркиваний указывается с помощью text-decoration-line. Это предпочтительный способ раскрасить эти текстовые украшения, а не использовать комбинации других HTML-элементов.

см. Также text-decoration-color в черновой спецификации CSS 3.

если вы хотите использовать этот метод немедленно, вы, вероятно, должны префикс его, используя -moz-text-decoration-color. (Также укажите его без -moz- для совместимость.)

я использовал пустой :after элемент и оформил одну границу на нем. Вы даже можете использовать преобразования CSS, чтобы повернуть его для наклонной линии. результат: чистый CSS, никаких дополнительных HTML-элементов! недостаток: не переносится через несколько строк, хотя IMO вы не должны использовать зачеркивание на больших блоках текста в любом случае.

s,
strike {
  text-decoration: none;
  /*we're replacing the default line-through*/
  position: relative;
  display: inline-block;
  /* keeps it from wrapping across multiple lines */
}

s:after,
strike:after {
  content: "";
  /* required property */
  position: absolute;
  bottom: 0;
  left: 0;
  border-top: 2px solid red;
  height: 45%;
  /* adjust as necessary, depending on line thickness */
  /* or use calc() if you don't need to support IE8: */
  height: calc(50% - 1px);
  /* 1px = half the line thickness */
  width: 100%;
  transform: rotateZ(-4deg);
}
<p>Here comes some <strike>strike-through</strike> text!</p>

добавление в @gojomo вы можете использовать :after псевдо элемент для дополнительного элемента. Единственное предостережение заключается в том, что вам нужно будет определить свой innerText на data-text атрибут, так как CSS имеет ограниченный content функции.

CSS

<style>
  s {
    color: red;
    text-align: -1000em;
    overflow: hidden;
  }
  s:after {
    color: black;
    content: attr(data-text);
  }
</style>

HTML

<s data-text="Strikethrough">Strikethrough</s>

вот подход, который использует градиент для подделки линии. Он работает с многострочными ударами и не нуждается в дополнительных элементах DOM. Но это фон, это за текст...

del, strike {
  text-decoration: none;
  line-height: 1.4;
  background-image: -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.63em, transparent), color-stop(0.63em, #ff0000), color-stop(0.7em, #ff0000), color-stop(0.7em, transparent), to(transparent));
  background-image: -webkit-linear-gradient(top, transparent 0em, transparent 0.63em, #ff0000 0.63em, #ff0000 0.7em, transparent 0.7em, transparent 1.4em);
  background-image: -o-linear-gradient(top, transparent 0em, transparent 0.63em, #ff0000 0.63em, #ff0000 0.7em, transparent 0.7em, transparent 1.4em);
  background-image: linear-gradient(to bottom, transparent 0em, transparent 0.63em, #ff0000 0.63em, #ff0000 0.7em, transparent 0.7em, transparent 1.4em);
  -webkit-background-size: 1.4em 1.4em;
  background-size: 1.4em 1.4em;
  background-repeat: repeat;
}

см. скрипка:http://jsfiddle.net/YSvaY/

цвет градиента-остановки и размер фона зависят от высоты линии. (Я использовал меньше для расчета и Autoprefixer впоследствии...)

вот так:

<style>body {color: #000;}</style>
<del>&nbsp;&nbsp;<span style="color:#999">facebook</span>&nbsp;&nbsp;</del>

ответ Blazemonger (выше или ниже) нуждается в голосовании - но у меня недостаточно очков.

Я хотел добавить серую полосу через некоторые круглые кнопки CSS шириной 20 пикселей, чтобы указать "недоступно" и настроить css Blazemonger:

.round_btn:after {
    content:"";    /* required property */
    position: absolute;
    top: 6px;
    left: -1px;
    border-top: 6px solid rgba(170,170,170,0.65);
    height: 6px;
    width: 19px;
}

по моему опыту

<span style='color:red;text-decoration:line-through'>
    <span style='color:black'>black with red strikethrough</span>
</span>

это не лучший вариант. У меня был сотрудник, который использовал этот метод без тестирования кросс-браузера, поэтому мне пришлось вернуться и исправить его, потому что он вызвал проблемы в firefox. Моя личная рекомендация состояла бы в том, чтобы использовать селектор :after для создания зачеркивания. Таким образом, он может вернуться к IE8, если вы действительно хотели без каких-либо конфликтов стилей, а также твердых во всех других браузерах.

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

Так что если кто-то еще сталкивается с подобными проблемами, надеюсь, это может помочь:

.lineThrough {
    position: relative;

   &:after {
      content: "  ";
      display: block;
      width: 60px;
      height: 1px;
      background: red;
      position: absolute;
      top: 49%;
      left: 50%;
      margin-left: -30px;
   }
}

очевидно, что вы можете использовать transform: translate вместо полей, но этот пример должен работать обратно в IE8

назначение нужного сквозного цвета родительскому элементу работает для удаленного текстового элемента (<del>) а также-делая предположение, что клиент оказывает <del> как сквозной линии.

http://jsfiddle.net/kpowz/vn9RC/

Если вы не заботитесь о internet explorer\edge, то самый простой способ добиться другого цвета для strike-through - это использовать свойство CSS: текст-украшения-цвета в сочетании с текстовым оформлением: line-through;

.yourClass {
    text-decoration: line-through !important;
    text-decoration-color: red !important;
}

-- Не работает с Edge\Internet Explorer

вот пример реализации jQuery-благодаря ответу gojomo и предложению utype (+1 для обоих)

$(function(){
  //===================================================================
  // Special price strike-out text
  // Usage:
  //   Normally:    <span class='price'></span>
  //   On special:  <span class='price' special=''></span>
  //===================================================================
  $(".price[special]").each(function() {
    var originalPrice = $(this).text();
    $(this).html('<strike><span>' + originalPrice +'</span></strike> ' + $(this).attr('special'))
           .removeAttr('special')
           .addClass('special');
  });
});

CSS для этого может быть

.price strike, .price.special { color: Red; }
.price strike span { color: Black; }

Comments

    Ничего не найдено.