Ho bisogno di qualcosa di simile:
Come si può ottenere questo risultato con css? So che un modo è usare l'immagine di sfondo, ma posso farlo solo con CSS senza alcuna immagine?
Ho bisogno di qualcosa di simile:
Come si può ottenere questo risultato con css? So che un modo è usare l'immagine di sfondo, ma posso farlo solo con CSS senza alcuna immagine?
Risposte:
C'è un modo hacky per farlo, usando lo :before
pseudo elemento. Dai :before
un bordo, quindi ruotalo con una trasformazione CSS. In questo modo non vengono aggiunti elementi aggiuntivi al DOM e l'aggiunta / rimozione del barrato è semplice come aggiungere / rimuovere la classe.
:before
, tuttavia si degraderà con grazia nei browser che lo supportano:before
ma non supportano le trasformazioni CSS..strikethrough {
position: relative;
}
.strikethrough:before {
position: absolute;
content: "";
left: 0;
top: 50%;
right: 0;
border-top: 1px solid;
border-color: inherit;
-webkit-transform:rotate(-5deg);
-moz-transform:rotate(-5deg);
-ms-transform:rotate(-5deg);
-o-transform:rotate(-5deg);
transform:rotate(-5deg);
}
<span class="strikethrough">Deleted text</span>
Puoi usare lo sfondo linear-gradient
con currentColor
per evitare l'hardcoding del colore del carattere:
.strikediag {
background: linear-gradient(to left top, transparent 47.75%, currentColor 49.5%, currentColor 50.5%, transparent 52.25%);
}
.withpadding {
padding: 0 0.15em;
}
The value is <span class="strikediag">2x</span> 3x<br>
The number is <span class="strikediag">1234567890</span>.
<p>
The value is <span class="strikediag withpadding">2x</span>3x<br>
The number is <span class="strikediag withpadding">1234567890</span>.
Se non è necessario che l'elemento sia completamente in linea, è possibile utilizzare uno pseudo elemento per posizionare la linea sopra l'elemento. In questo modo l'angolo può essere regolato cambiando la dimensione dello pseudo elemento:
.strikediag {
display: inline-block;
position: relative;
}
.strikediag::before {
content: '';
position: absolute;
left: -0.1em;
right: -0.1em;
top: 0.38em;
bottom: 0.38em;
background: linear-gradient(to left top, transparent 45.5%, currentColor 47.5%, currentColor 52.5%, transparent 54.5%);
pointer-events: none;
}
The value is <span class="strikediag">2x</span> 3x<br>
The number is <span class="strikediag">1234567890</span>.
Penso che potresti probabilmente applicare un effetto di rotazione a una riga orizzontale. Qualcosa di simile a:
<html>
<body>
<hr />
123456
</body>
</html>
Con il CSS:
HR
{
width: 50px;
position: absolute;
background-color: #000000;
color: #000000;
border-color: #000000;
transform:rotate(-7deg);
-ms-transform:rotate(-7deg);
-moz-transform:rotate(-7deg);
-webkit-transform:rotate(-7deg);
-o-transform:rotate(-7deg);
}
Il tuo chilometraggio può variare a seconda del browser e della versione, quindi non sono sicuro se ricorrere a questo. Ad esempio, potresti dover creare un codice VML originale per supportare le versioni precedenti di IE.
-7
gradi, non +7
; nota 2: HR
è grigio in Chrome; è possibile sovrascrivere?
Gradiente CSS3
background-image: linear-gradient(left bottom, rgb(234,20,136) 0%, rgb(255,46,164) 50%, rgb(255,74,197) 0%);
background-image: -o-linear-gradient(left bottom, rgb(234,20,136) 0%, rgb(255,46,164) 50%, rgb(255,74,197) 0%);
background-image: -moz-linear-gradient(left bottom, rgb(234,20,136) 0%, rgb(255,46,164) 50%, rgb(255,74,197) 0%);
background-image: -webkit-linear-gradient(left bottom, rgb(234,20,136) 0%, rgb(255,46,164) 50%, rgb(255,74,197) 0%);
background-image: -ms-linear-gradient(left bottom, rgb(234,20,136) 0%, rgb(255,46,164) 50%, rgb(255,74,197) 0%);
background-image: -webkit-gradient( linear, left bottom,right top,color-stop(0, rgb(234,20,136)), color-stop(0.5, rgb(255,46,164)), color-stop(0, rgb(255,74,197)) );
Il mio esempio non soddisferà perfettamente le tue esigenze ma, per maggiori informazioni e divertenti modifiche, vedi http://gradients.glrzad.com/ .
Quello che devi fare è creare un background-gradient
di white-black-white
e posizionarti opacity
in qualcosa di simile 48% 50% 52%
.
Non credo che ci sia una soluzione CSS sostenibile a questo.
La mia soluzione CSS pura sarebbe quella di posizionare un altro elemento di testo dietro il tuo primo elemento di testo che è identico in numero di caratteri (i caratteri sono ""), una declinazione del testo di line-through e una trasformazione di rotazione.
Qualcosa di simile a:
<html>
<head>
<style>
.strike{
text-decoration: line-through;
-webkit-transform: rotate(344deg);
-moz-transform: rotate(344deg);
-o-transform: rotate(344deg);}
</style>
</head>
<body>
<p>Text to display</p>
<p class='strike'> </p>
</body>
Esempio di rotazione del testo
Non vedo l'ora di ricevere risposte migliori da altri utenti.
Questa è una vecchia domanda, ma in alternativa puoi usare CSS3 Linear Gradients per esempio ( http://codepen.io/yusuf-azer/pen/ojJLoG ).
Per una spiegazione approfondita e un controllo MENO Soluzione
http://www.yusufazer.com/tutorials-how-to/how-to-make-a-diagonal-line-through-with-css3/
span.price--line-through {
background-color: transparent;
background-image: -webkit-gradient(linear, 19.1% -7.9%, 81% 107.9%, color-stop(0, #fff), color-stop(.475, #fff), color-stop(.5, #000), color-stop(.515, #fff), color-stop(1, #fff));
background-image: -webkit-repeating-linear-gradient(287deg, #fff 0%, #fff 47.5%, #000 50%, #fff 51.5%, #fff 100%);
background-image: repeating-linear-gradient(163deg, #fff 0%, #fff 47.5%, #000 50%, #fff 51.5%, #fff 100%);
background-image: -ms-repeating-linear-gradient(287deg, #fff 0%, #fff 47.5%, #000 50%, #fff 51.5%, #fff 100%);
}
L'ho fatto in questo modo usando un SVG nell'HTM con una classe CSS:
HTML:
<ul>
<li>Regular Price: <div class="zIndex-10a">$4.50</div><div class="zIndex-10b"><svg height="16" width="5"><line x1="0" y1="20" x2="40" y2="0" class="Strike-01a"></svg></div></li>
</ul>
CSS:
/* -- CONTAINS TEXT TO STRIKE ---- */ .zIndex-10a { display: inline-block; position: relative; left: 0px; z-index: 10; }
/* -- CONTAINS SVG LINE IN HTML -- */ .zIndex-10b { display: inline-block; position: relative; right: 40px; z-index: 11; }
/* -- SVG STROKE PROPERTIES ------ */ .Strike-01a { stroke: rgb(255,0,0); stroke-width:2; }
Potrebbero esserci modi più semplici a questo punto. L'ho appena preparato in un pizzico per la mia pagina dell'offerta speciale dei dettagli del prodotto. Spero che aiuti qualcuno.
Provare
.mydiv {
background-color: #990000;
color: #FFFF00;
font-size: 2em;
padding-top: 10px;
padding-bottom: 10px;
border-radius: 15px;
max-width: 300px;
width: 100%;
}
.strikethrough-100p, .strikethrough-50p{
position: relative;
text-align: center;
}
.strikethrough-100p:before {
position: absolute;
content: "";
left: 0;
top: 50%;
right: 0;
border-top: 3px solid;
border-color: inherit;
-webkit-transform:rotate(-5deg);
-moz-transform:rotate(-5deg);
-ms-transform:rotate(-5deg);
-o-transform:rotate(-5deg);
transform:rotate(-5deg);
}
.strikethrough-50p:before {
position: absolute;
content: "";
width:50%;
left: 25%;
top: 50%;
right: 0;
border-top: 3px solid;
border-color: inherit;
-webkit-transform:rotate(-5deg);
-moz-transform:rotate(-5deg);
-ms-transform:rotate(-5deg);
-o-transform:rotate(-5deg);
transform:rotate(-5deg);
}
<div class="mydiv">
<div class="strikethrough-100p">123456</div>
</div>
<br>
<div class="mydiv">
<div class="strikethrough-50p">123456</div>
</div>
Ed ecco una versione stravagante:
background:none repeat scroll 0 0 rgba(255, 0, 0, 0.5);
-moz-border-radius:20px 0;
-webkit-border-radius:20px 0;
border-radius:20px 0;
content: "";
height:5px; left:-5%;
position:absolute;
top:30%;
-moz-transform:rotate(-7deg);
-webkit-transform:rotate(-7deg);
transform:rotate(-7deg);
transform-origin:50% 50% 0;
width:110%;
transform
quello che conosco a meno che non possa funzionare confilter