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:
:before
Sözde öğeyi kullanarak bunu yapmanın hilekâr bir yolu var . :before
Bir 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 :before
ancak 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-gradient
ile currentColor
yazı 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.
-7
derece, değil +7
; not 2: HR
Chrome'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-gradient
ait white-black-white
ve keşfetmenize konumlandırmak opacity
gibi 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%;
transform
ile çalışamazsa bildiğim bir benzeri yokfilter