Tôi cần một cái gì đó như thế này:
Làm thế nào để đạt được điều này với css? Tôi biết rằng một cách là sử dụng hình nền, nhưng tôi có thể đạt được điều này chỉ với css mà không có bất kỳ hình ảnh nào không?
Tôi cần một cái gì đó như thế này:
Làm thế nào để đạt được điều này với css? Tôi biết rằng một cách là sử dụng hình nền, nhưng tôi có thể đạt được điều này chỉ với css mà không có bất kỳ hình ảnh nào không?
Câu trả lời:
Có một cách hacky để làm điều này, sử dụng :before
phần tử giả. Bạn tạo :before
đường viền, sau đó xoay nó bằng một biến đổi CSS. Làm theo cách này sẽ không thêm phần tử bổ sung nào vào DOM và việc thêm / xóa đường gạch ngang cũng đơn giản như thêm / xóa lớp.
:before
, tuy nhiên sẽ làm suy giảm một cách duyên dáng trong các trình duyệt làm hỗ trợ :before
nhưng không hỗ trợ biến đổi 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>
Bạn có thể sử dụng nền linear-gradient
với currentColor
để tránh màu phông chữ mã cứng:
.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>.
Nếu bạn không cần phần tử phải nội dòng hoàn toàn, bạn có thể sử dụng phần tử giả để đặt dòng lên trên phần tử. Bằng cách này, góc có thể được điều chỉnh bằng cách thay đổi kích thước của phần tử giả:
.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>.
Tôi nghĩ bạn có thể áp dụng hiệu ứng xoay cho quy tắc ngang. Cái gì đó như:
<html>
<body>
<hr />
123456
</body>
</html>
Với 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);
}
Tuy nhiên, số dặm của bạn có thể thay đổi tùy theo trình duyệt và phiên bản, vì vậy tôi không chắc liệu mình có dùng đến điều này hay không. Ví dụ, bạn có thể phải lấy ra một số mã VML thú vị để hỗ trợ các phiên bản IE cũ hơn.
-7
độ, không phải +7
; lưu ý 2: HR
có màu xám trong Chrome; là có thể ghi đè?
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)) );
Ví dụ của tôi sẽ không đáp ứng nhu cầu của bạn một cách hoàn hảo nhưng để biết thêm thông tin và các chỉnh sửa vui nhộn, hãy xem http://gradients.glrzad.com/ .
Những gì bạn phải làm là tạo ra một background-gradient
số white-black-white
và vị trí của bạn opacity
tại một cái gì đó giống như 48% 50% 52%
.
Tôi không nghĩ rằng có một giải pháp css bền vững cho điều này.
Giải pháp CSS thuần túy của tôi sẽ là đặt một phần tử văn bản khác phía sau phần tử văn bản đầu tiên của bạn giống hệt nhau về số ký tự (ký tự là ''), ngắt dòng văn bản và chuyển đổi xoay vòng.
Cái gì đó như:
<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>
Tôi rất mong nhận được câu trả lời tốt hơn từ những người dùng khác.
Đây là một câu hỏi cũ nhưng để thay thế, bạn có thể sử dụng CSS3 Linear Gradients chẳng hạn ( http://codepen.io/yusuf-azer/pen/ojJLoG ).
Để giải thích sâu rộng và kiểm tra Giải pháp ÍT
http://www.yusufazer.com/tutorials-how-to/how-to-make-a-diagon-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%);
}
Tôi đã làm theo cách này bằng cách sử dụng SVG trong HTM với lớp 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; }
Có thể có nhiều cách đơn giản dễ dàng hơn bây giờ. Tôi vừa chuẩn bị xong điều này cho trang ưu đãi đặc biệt chi tiết sản phẩm của mình. Hy vọng nó sẽ giúp một ai đó.
Thử
.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>
Và đây là một phiên bản lạ mắt:
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
mà tôi biết trừ khi nó có thể làm việc vớifilter