Potrzebuję czegoś takiego:
Jak można to osiągnąć za pomocą CSS? Wiem, że jednym ze sposobów jest użycie obrazu tła, ale czy mogę to osiągnąć tylko z css bez żadnego obrazu?
Potrzebuję czegoś takiego:
Jak można to osiągnąć za pomocą CSS? Wiem, że jednym ze sposobów jest użycie obrazu tła, ale czy mogę to osiągnąć tylko z css bez żadnego obrazu?
Odpowiedzi:
Można to zrobić w okrutny sposób, używając :before
pseudoelementu. Dajesz :before
obramowanie, a następnie obracasz je za pomocą transformacji CSS. Zrobienie tego w ten sposób nie dodaje żadnych dodatkowych elementów do DOM, a dodanie / usunięcie przekreślenia jest tak proste, jak dodanie / usunięcie klasy.
:before
, jednak będzie się z wdziękiem degradować w przeglądarkach, które obsługują, :before
ale nie obsługują transformacji 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>
Możesz użyć tła linear-gradient
z, currentColor
aby uniknąć zakodowania koloru czcionki:
.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>.
Jeśli nie potrzebujesz, aby element był w pełni wbudowany, możesz użyć pseudoelementu, aby umieścić linię na górze elementu. W ten sposób kąt można dostosować, zmieniając rozmiar pseudoelementu:
.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>.
Myślę, że prawdopodobnie można by zastosować efekt rotacji do reguły poziomej. Coś jak:
<html>
<body>
<hr />
123456
</body>
</html>
Dzięki 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);
}
Twój przebieg może się jednak różnić w zależności od przeglądarki i wersji, więc nie jestem pewien, czy skorzystałbym z tego. Być może będziesz musiał pobrać jakiś funky kod VML, aby na przykład obsługiwać starsze wersje IE.
-7
stopnie, nie +7
; uwaga 2: HR
w Chrome jest szara; czy można to zmienić?
Gradient 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)) );
Mój przykład nie spełni twoich potrzeb idealnie, ale więcej informacji i zabawnych poprawek znajdziesz na http://gradients.glrzad.com/ .
Co trzeba zrobić, to stworzyć background-gradient
od white-black-white
i pozycję opacity
na coś podobnego 48% 50% 52%
.
Myślę, że nie ma na to trwałego rozwiązania CSS.
Moim czystym rozwiązaniem CSS byłoby umieszczenie kolejnego elementu tekstu za pierwszym elementem tekstu, który jest identyczny pod względem liczby znaków (znaki to „”), dekleracja tekstu przechodząca przez wiersz i przekształcenie obrotu.
Coś jak:
<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>
Nie mogę się doczekać lepszych odpowiedzi od innych użytkowników.
To stare pytanie, ale jako alternatywę możesz użyć na przykład liniowych gradientów CSS3 ( http://codepen.io/yusuf-azer/pen/ojJLoG ).
Obszerne wyjaśnienia i MNIEJSZE sprawdzenie rozwiązania
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%);
}
Zrobiłem to w ten sposób używając SVG w HTM z klasą 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; }
Teraz mogą być prostsze sposoby. Przygotowałem to w mgnieniu oka na stronę oferty specjalnej ze szczegółami produktu. Mam nadzieję, że to komuś pomoże.
Próbować
.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>
A oto fantazyjna wersja:
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
tego, o którym wiem, chyba że może działaćfilter