Bunun gibi bir şeye ihtiyacım var:

Bunu css ile nasıl başarabilirim? Bunun bir yolunun arka plan görüntüsü kullanmak olduğunu biliyorum, ancak bunu yalnızca herhangi bir görüntü olmadan css ile başarabilir miyim?
Bunun gibi bir şeye ihtiyacım var:

Bunu css ile nasıl başarabilirim? Bunun bir yolunun arka plan görüntüsü kullanmak olduğunu biliyorum, ancak bunu yalnızca herhangi bir görüntü olmadan css ile başarabilir miyim?
Yanıtlar:
:beforeSözde öğeyi kullanarak bunu yapmanın hilekâr bir yolu var . :beforeBir kenarlık verirsiniz , ardından bir CSS dönüşümü ile döndürürsünüz. Bunu bu şekilde yapmak, DOM'a fazladan öğe eklemez ve üstünü çizme eklemek / kaldırmak, sınıfı eklemek / çıkarmak kadar basittir.
:before ancak tarayıcılarda incelikle düşecektir, do desteği :beforeancak CSS dönüşümleri desteklemez..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>
Sen arka plan kullanabilirsiniz linear-gradientile currentColoryazı tipi rengini hardcoding kaçınmak için:
.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>.
Öğenin tamamen satır içi olmasına ihtiyacınız yoksa, çizgiyi öğenin üstüne yerleştirmek için sözde bir öğe kullanabilirsiniz. Bu şekilde, sözde öğenin boyutu değiştirilerek açı ayarlanabilir:
.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>.
Yatay bir kurala muhtemelen bir döndürme efekti uygulayabileceğinizi düşünüyorum. Gibi bir şey:
<html>
<body>
<hr />
123456
</body>
</html>
CSS ile:
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);
}
Kilometreniz tarayıcıya ve sürüme bağlı olarak değişebilir, bu yüzden buna başvurabilir miyim emin değilim. Örneğin, IE'nin eski sürümlerini desteklemek için bazı ilginç VML kodunu çıkarmanız gerekebilir.
-7derece, değil +7; not 2: HRChrome'da gridir; bu geçersiz kılmak mümkün mü?
CSS3 gradyanı
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)) );
Örneğim ihtiyaçlarınızı tam olarak karşılamayacak, ancak daha fazla bilgi ve eğlenceli ince ayarlar için http://gradients.glrzad.com/ adresine bakın .
Ne yapmak zorunda oluşturmaktır background-gradientait white-black-whiteve keşfetmenize konumlandırmak opacitygibi bir şey 48% 50% 52%.
Bunun sürdürülebilir bir css çözümü olduğunu düşünmüyorum.
Benim saf CSS çözümüm, ilk metin öğenizin arkasına karakter sayısı (karakterler ''), satır geçişi metin bildirimi ve döndürme dönüşümü bakımından aynı olan başka bir metin öğesi yerleştirmek olacaktır.
Gibi bir şey:
<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>
Diğer kullanıcılardan daha iyi yanıtlar görmeyi dört gözle bekliyorum.
Bu eski bir sorudur, ancak alternatif olarak CSS3 Doğrusal Degradeleri kullanabilirsiniz ( http://codepen.io/yusuf-azer/pen/ojJLoG ).
Kapsamlı açıklama ve DAHA AZ Çözüm kontrolü için
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%);
}
Bojangles yanıtını yukarıdan geliştirmek:
.strike-diagonal-price {
position: relative;
background-color: black;
color: white;
}
.strike-diagonal-price:before {
position: absolute;
content: "";
left: 0;
top: 45%;
right: 0;
border-top: 2px solid;
border-color: red;
-webkit-transform: rotate(-25deg);
-moz-transform: rotate(-25deg);
-ms-transform: rotate(-25deg);
-o-transform: rotate(-25deg);
transform: rotate(-25deg);
}
HTM'de CSS sınıfıyla bir SVG kullanarak şu şekilde yaptım:
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; }
Şimdiye kadar daha kolay yollar olabilir. Ürün detayı özel teklif sayfam için bunu biraz önce hazırladım. Umarım birine yardımcı olur.
Deneyin
.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>
Ve işte süslü bir versiyon:
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%;
transformile çalışamazsa bildiğim bir benzeri yokfilter