web-dev-qa-db-ja.com

cssで斜めに打つ方法

次のようなものが必要です。 

どのようにCSSでこれを達成できますか?私は1つの方法が背景画像を使用することを知っていますが、画像なしでcssでのみこれを達成できますか?

88

:before疑似要素を使用して、これを行うためのハッキング方法があります。 :beforeに境界線を付けてから、CSS変換で回転させます。この方法でDOMに追加の要素を追加することはなく、取り消し線の追加/削除は、クラスの追加/削除と同じくらい簡単です。

こちらがデモです

注意事項

  • これはIE8までしか機能しません。 IE7 :before をサポートしていませんが、doサポート:beforeが、CSS変換をサポートしていません。
  • 回転角度は固定されています。テキストが長い場合、線はテキストの角に触れません。これに注意してください。

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);
}

HTML

<span class="strikethrough">Deleted text</span>
170
Bojangles

背景linear-gradientcurrentColorとともに使用して、フォントの色をハードコーディングすることを回避できます。

.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>.

要素を完全にインラインにする必要がない場合は、擬似要素を使用して、要素の上に行を配置できます。このように、擬似要素のサイズを変更することで角度を調整できます。

.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>.
39
user
del {
    position:relative;
    text-decoration:none;
}
del::after {
    content:"";
    position:absolute;
    top:50%; left:0; width:100%; height:1px; 
    background:black;
    transform:rotate(-7deg);
}
5
Kornel

おそらく水平効果に回転効果を適用できると思います。何かのようなもの:

<html>
    <body>
        <hr />
        123456
    </body>
</html>

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);
} 

フィドル

ただし、マイレージはブラウザとバージョンによって異なる場合があるため、これに頼るかどうかはわかりません。たとえば、IEの古いバージョンをサポートするために、ファンキーなVMLコードを使用する必要がある場合があります。

4

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)) );

私の例はあなたのニーズを完璧に満たすことはできませんが、詳細と面白い週は: http://gradients.glrzad.com/

あなたがしなければならないことは、白と黒と白の背景グラデーションを作成し、スムージングラインに不透明度を配置することです48%50%52%

続ける

3
Milche Patern

CSSクラスを使用してHTMでSVGを使用して、この方法でこれを行いました。

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; }

今ではもっと簡単な方法があるかもしれません。製品詳細の特別提供ページのためにピンチでこれを作りました。それが誰かを助けることを願っています。

0
IconMatrix

これには持続可能なCSSソリューションはないと思います。

私の純粋なCSSソリューションは、テキストの最初の要素の後ろに、文字数(文字は '')と同じテキストの別の要素、行のテキスト修飾、および回転の変換を配置することです。

何かのようなもの:

<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>

テキスト回転の例

他のユーザーからより良い回答が得られるのを楽しみにしています。

0
Levi

これは古い質問ですが、代わりにCSS3線形グラデーションを使用できます( http://codepen.io/yusuf-azer/pen/ojJLoG )。

詳細な説明とLESSソリューションチェックについて

http://www.yusufazer.com/tutorials-how-to/how-to-make-a-diagonal-line-through-with-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%);
} 
0
Scratch.