Ich brauche so etwas:
Wie kann dies mit CSS erreicht werden? Ich weiß, dass eine Möglichkeit darin besteht, ein Hintergrundbild zu verwenden, aber kann ich dies nur mit CSS ohne Bild erreichen?
Ich brauche so etwas:
Wie kann dies mit CSS erreicht werden? Ich weiß, dass eine Möglichkeit darin besteht, ein Hintergrundbild zu verwenden, aber kann ich dies nur mit CSS ohne Bild erreichen?
Antworten:
Es gibt eine hackige Möglichkeit, dies mithilfe des Pseudoelements zu tun :before
. Sie geben dem Rahmen :before
einen Rand und drehen ihn dann mit einer CSS-Transformation. Wenn Sie dies auf diese Weise tun, werden dem DOM keine zusätzlichen Elemente hinzugefügt, und das Hinzufügen / Entfernen des Durchgestrichenen ist so einfach wie das Hinzufügen / Entfernen der Klasse.
:before
, wird jedoch degradieren graziös in Browsern , die nicht unterstützen , :before
aber keine Unterstützung für CSS - Transformationen..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>
Sie können Hintergrund verwenden linear-gradient
mit verwenden currentColor
, um eine Hardcodierung der Schriftfarbe zu vermeiden:
.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>.
Wenn das Element nicht vollständig inline sein muss, können Sie ein Pseudoelement verwenden, um die Linie über dem Element zu platzieren. Auf diese Weise kann der Winkel durch Ändern der Größe des Pseudoelements angepasst werden:
.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>.
Ich denke, Sie könnten wahrscheinlich einen Rotationseffekt auf eine horizontale Regel anwenden. Etwas wie:
<html>
<body>
<hr />
123456
</body>
</html>
Mit dem 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);
}
Ihr Kilometerstand kann jedoch je nach Browser und Version variieren, daher bin ich mir nicht sicher, ob ich darauf zurückgreifen würde. Möglicherweise müssen Sie funky VML-Code abrufen, um beispielsweise ältere Versionen von IE zu unterstützen.
-7
Grad, nicht +7
; Anmerkung 2: HR
ist in Chrome grau; ist das möglich zu überschreiben?
CSS3-Gradient
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)) );
Mein Beispiel wird Ihre Anforderungen nicht perfekt erfüllen, aber für weitere Informationen und lustige Verbesserungen siehe http://gradients.glrzad.com/ .
Was Sie tun müssen, ist ein background-gradient
von zu erstellen white-black-white
und Ihr opacity
auf so etwas zu positionieren 48% 50% 52%
.
Ich glaube nicht, dass es dafür eine nachhaltige CSS-Lösung gibt.
Meine reine CSS-Lösung wäre, ein anderes Textelement hinter Ihrem ersten Textelement zu platzieren, das in der Anzahl der Zeichen identisch ist (Zeichen sind ''), eine Textdekleration der Durchleitung und eine Transformation der Drehung.
Etwas wie:
<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>
Beispiel für eine Textrotation
Ich freue mich auf bessere Antworten von anderen Benutzern.
Dies ist eine alte Frage, aber als Alternative können Sie beispielsweise lineare CSS3-Verläufe verwenden ( http://codepen.io/yusuf-azer/pen/ojJLoG ).
Für ausführliche Erklärungen und eine WENIGER Lösungsprüfung
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%);
}
Ich habe es so gemacht, indem ich eine SVG im HTM mit einer CSS-Klasse verwendet habe:
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; }
Es könnte jetzt einfachere und einfachere Wege geben. Ich habe das gerade zur Not für meine Seite mit Sonderangeboten für Produktdetails zusammengestellt. Hoffe es hilft jemandem.
Versuchen
.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>
Und hier ist eine schicke Version:
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
, von dem ich weiß, es sei denn, es kann funktionierenfilter