CSS tachado color diferente del texto?
Los elementos HTMLdel
, strike
, o s
se pueden usar todos para un efecto de tachado de texto. Ejemplos:
<del>del</del>
....da: del
<strike>strike</strike> and <s>strike</s>
....da: huelga y huelga
La propiedad CSS text-decoration
con un valor line-through
se puede usar de manera similar. Codificación...
<span style='text-decoration:line-through'>
text-decoration:line-through
</span>
...también se renderizará como: decoración de texto: line-through
Sin embargo, la línea tachada es típicamente del mismo color que el texto.
¿Se puede usar CSS para hacer que la línea tenga un color diferente?
11 answers
Sí, añadiendo un elemento de envoltura adicional. Asigne el color de línea deseado a un elemento externo, luego el color de texto deseado al elemento interno. Por ejemplo:
<span style='color:red;text-decoration:line-through'>
<span style='color:black'>black with red strikethrough</span>
</span>
...o...
<strike style='color:red'>
<span style='color:black'>black with red strikethrough<span>
</strike>
(Tenga en cuenta, sin embargo, que <strike>
es considerado obsoleto en HTML4 y obsoleto en HTML5 (véase también W3.org ). El enfoque recomendado es utilizar <del>
si se pretende un verdadero significado de supresión, o de lo contrario utilizar un <s>
elemento o estilo con text-decoration
CSS como en el primer ejemplo aquí.)
Para hacer que el tachado aparezca para a:hover, se debe usar una hoja de estilo explícita (declarada o referenciada en <HEAD>
). (La pseudo-clase :hover
no se puede aplicar con atributos de ESTILO en línea. Por ejemplo:
<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 parece requerir que se establezca algún href
en el <a>
antes de que :hover
tenga un efecto; los navegadores basados en FF y WebKit no lo hacen.)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-09 20:17:17
A partir de febrero. 2016, CSS 3 tiene el soporte mencionado a continuación. Aquí hay un fragmento de la página de un solo producto de WooCommerce con descuento de precio
/*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 */
}
CSS 3 probablemente tendrá soporte directo usando el text-decoration-color
propiedad . En particular:
La propiedad CSS
text-decoration-color
establece el color utilizado cuando se dibujan subrayados, líneas excesivas o tachaduras especificadas portext-decoration-line
. Esta es la forma preferida de colorear estos textos decoraciones, en lugar de usar combinaciones de otros elementos HTML.
Véase tambiéntext-decoration-color
en el CSS 3 borrador spec .
Si desea usar este método inmediatamente, probablemente tenga que ponerle un prefijo, usando -moz-text-decoration-color
. (También especifíquelo sin -moz-
, para la compatibilidad hacia adelante.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 16:14:46
He utilizado un elemento :after
vacío y decorado un borde en él. Incluso puede usar transformaciones CSS para rotarlo para una línea inclinada. Resultado: CSS puro, sin elementos HTML adicionales! Inconveniente: no se ajusta a través de múltiples líneas, aunque IMO no debe usar tachado en grandes bloques de texto de todos modos.
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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-19 15:46:16
Añadiendo a @gojomo podrías usar :after
pseudo elemento para el elemento adicional. La única advertencia es que necesitará definir su innerText
en un atributo data-text
ya que CSS tiene funciones limitadas 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-17 22:59:49
Aquí hay un enfoque que utiliza un gradiente para falsificar la línea. Funciona con ataques multilínea y no necesita elementos DOM adicionales. Pero como es un degradado de fondo, está detrás del texto...
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;
}
Ver violín: http://jsfiddle.net/YSvaY/
Las paradas de color degradadas y el tamaño del fondo dependen de la altura de la línea. (Utilicé MENOS para el cálculo y el Autoprefixer después...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-11 10:41:22
Aquí tienes:
<style>body {color: #000;}</style>
<del> <span style="color:#999">facebook</span> </del>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-08 16:56:03
La respuesta de Blazemonger (arriba o abajo) necesita ser votada - pero no tengo suficientes puntos.
Quería agregar una barra gris a través de algunos botones redondos CSS de 20px para indicar "no disponible"y ajustar el css de 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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-03 11:16:00
En mi experiencia el
<span style='color:red;text-decoration:line-through'>
<span style='color:black'>black with red strikethrough</span>
</span>
No es la mejor opción. Hice que un compañero de trabajo use este método sin probar el navegador cruzado, así que tuve que volver y arreglarlo porque causó problemas en Firefox. Mi recomendación personal sería utilizar el selector: after para crear un tachado. De esa manera se puede volver a IE8 si realmente quería sin ningún tipo de conflictos de estilo, así como sólido a través de todos los demás navegadores.
También crea menos marcado y aproximadamente la misma cantidad de estilo lo que en mi opinión es un gran problema.
Así que si alguien más se encuentra con problemas similares espero que esto pueda ayudar:
.lineThrough {
position: relative;
&:after {
content: " ";
display: block;
width: 60px;
height: 1px;
background: red;
position: absolute;
top: 49%;
left: 50%;
margin-left: -30px;
}
}
Obviamente podrías usar transform: translate en lugar de margins, pero este ejemplo es trabajar de nuevo a IE8
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 16:13:40
Asignar el color de paso de línea deseado a un elemento padre también funciona para el elemento de texto eliminado (<del>
), haciendo la suposición que el cliente renderiza <del>
como un paso de línea.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-22 03:17:58
Si no le importa Internet explorer\edge, entonces la forma más simple de lograr un color diferente para strike-through sería usar la propiedad CSS: text-decoration-color en conjunto con text-decoration: line-through;
.yourClass {
text-decoration: line-through !important;
text-decoration-color: red !important;
}
} No funciona con Edge \ Internet Explorer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 06:13:58
Aquí hay un ejemplo de implementación de jQuery-gracias a la respuesta de gojomo y la sugerencia de utype (+1 para ambos)
$(function(){
//===================================================================
// Special price strike-out text
// Usage:
// Normally: <span class='price'>$59</span>
// On special: <span class='price' special='$29'>$59</span>
//===================================================================
$(".price[special]").each(function() {
var originalPrice = $(this).text();
$(this).html('<strike><span>' + originalPrice +'</span></strike> ' + $(this).attr('special'))
.removeAttr('special')
.addClass('special');
});
});
El CSS para eso podría ser
.price strike, .price.special { color: Red; }
.price strike span { color: Black; }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-18 05:44:52