如何更改CSS中的删除/穿透厚度?

时间:2010-03-29 15:38:25

标签: html css thickness line-through

我正在使用CSS中的text-decoration: line-through,但我似乎找不到任何方法来改变线条粗细,而不会使用<hr>或图像叠加等不雅的黑客。

是否有任何优雅的方法来指定直通线的厚度?

11 个答案:

答案 0 :(得分:90)

这是一个纯CSS方法,不需要任何不必要的包装元素。作为额外的好处,您不仅可以调整删除线的粗细,还可以将其颜色与文本颜色分开控制:

&#13;
&#13;
.strikeout {
  font-size: 4em;
  line-height: 1em;
  position: relative;
}
.strikeout::after {
  border-bottom: 0.125em solid red;
  content: "";
  left: 0;
  margin-top: calc(0.125em / 2 * -1);
  position: absolute;
  right: 0;
  top: 50%;
}
&#13;
<span class="strikeout">Struck out text</span>
&#13;
&#13;
&#13;

使用RGBa颜色使删除线处于半透明状态:

&#13;
&#13;
.strikeout {
  font-size: 4em;
  position: relative;
}
.strikeout::after {
  border-bottom: 0.125em solid rgba(255, 0, 0, 0.5);
  content: "";
  left: 0;
  line-height: 1em;
  margin-top: calc(0.125em / 2 * -1);
  position: absolute;
  right: 0;
  top: 50%;
}
&#13;
<span class="strikeout">Struck out text</span>
&#13;
&#13;
&#13;

甚至可以使三角形渐变!只需使用background结合height代替border

&#13;
&#13;
.strikeout {
  font-size: 4em;
  line-height: 1em;
  position: relative;
}
.strikeout::after {
  background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 0, 0, 1), rgba(0, 255, 0, 1), rgba(0, 0, 255, 1), rgba(255, 255, 255, 0));
  content: "";
  height: 0.125em;
  left: 0;
  margin-top: calc(0.125em / 2 * -1);
  position: absolute;
  right: 0;
  top: 50%;
}
&#13;
<span class="strikeout">Struck out text</span>
&#13;
&#13;
&#13;

这适用于IE9(无渐变)及以上 - 如果使用单冒号:after语法并手动编写负margin-top值而不是calc(),则可以使用IE8。

主要缺点是这只适用于单行文本。但是,嘿,你拿走你能得到的东西; - )

答案 1 :(得分:14)

这似乎是一个长期存在的问题,没有多线删除线的理想解决方案。

方便地,使用CSS渐变,您可以轻松调整线条粗细:

strike {
    text-decoration: none;
    background-image: linear-gradient(transparent 7px,#cc1f1f 7px,#cc1f1f 9px,transparent 9px);
}

请在此处查看演示和完整供应商前缀:http://codepen.io/pearlchen/pen/dhpxu

答案 2 :(得分:6)

简短回答:不。它取决于字体,下划线的厚度是一样的 - 它随着文字的厚度而变化

答案 3 :(得分:3)

这几天非常容易,使用以下 CSS

text-decoration-thickness: 1px;

您可以根据需要调整厚度。

可以像这样改变颜色

text-decoration-color: red;

主流浏览器支持

enter image description here

答案 4 :(得分:2)

我有一个想法,但它需要为每个厚度级别添加一个额外的元素。

HTML

<span><strike>test test</strike></span><br />  
<span id="test"><strike>           </strike></span>

CSS

span {height:1em}
#test {position:relative;top:-1.3em}

顺便说一下第二个范围内的空格是特价 - 你必须使用alt + 0160或alt + 255。
当你试图精确定位它时,你也可以在负顶部使用像素单位。


还有另一个选择,包括使用第一个文本修饰,然后设置样式<strike><del>,看看你是否可以垂直轻推它而不用它移动文本。

HTML

<span><strike>test test</strike></span>

CSS

span {text-decoration:line-through;color:red}
strike {position:relative;top:1px}

两者在这里工作正常,但请记住使用过渡性文档类型原因<strike>已被弃用。

答案 5 :(得分:1)

没有

但是,如果透视颜色与文本颜色相同,则可以轻松地在后台使用自定义图像。

如果您需要不同的颜色,那么覆盖自定义透视图像是唯一的方法。

答案 6 :(得分:1)

我意识到这已经过时了,但有一种方法可以使用嵌套的span标签:

<span style="text-decoration: line-through; font-size: 2em;">
  <span style="font-size: 0.5em; vertical-align: middle;">
    Striked Text
  </span>
</span>

删除线取决于字体的大小,因此如果将外跨度加倍,则会使线条的厚度增加一倍。然后,你需要将内部减少一半。垂直对齐是必要的,否则线条太高,使其看起来几乎是一个上线。

行动中:http://jsfiddle.net/moodleboy/deep3qw8/

适用于 Chrome / FF,但不适用于Safari,IE10或Opera。适用于Mac上的Chrome,但不适用于Windows。

答案 7 :(得分:1)

我找到了另一种多行文字方法:

span {
  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAADdv/LVAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAASSURBVHjaYvrPwMDEAMEAAQYACzEBBlU9CW8AAAAASUVORK5CYII=');
  background-repeat: repeat-x;
  background-position: center; 
}

http://output.jsbin.com/weqovenopi/1/

此方法假设重复图像(1px宽度和npx高度)。它也可以独立于字体大小。

只有一个缺点 - 背景呈现在文本下面。

答案 8 :(得分:0)

线条粗细由字体(族,大小等)决定。 CSS中没有用于更改此http://www.w3.org/TR/REC-CSS1/#text-decoration

的规定

答案 9 :(得分:0)

这不能回答这个问题,但它的相关性在于它解决了使用脚本编写缺乏独特的删除问题。我不是纯粹主义者,但我相信这是一个x浏览器解决方案。

<html>
<script src="/js/jquery/jquery.js"></script>
<script>
function do_strike_out(idx)
{
  $(this).wrap("<span style='position:relative;left:0px;top:0px;'>").
    before( "<span style='margin-top:10px;border-top:1px solid #FF0000;"+
      "position:absolute;width:100%;left:0px;'></span>" ).
    wrap("<span style='position:relative;left:0px;top:0px;'>");
}
$(function(){
  $('.strike_out').each(do_strike_out);
});
</script>
<body>
A jquery hack to do colored strike-through <span class='strike_out'>STRIKE-OUT</span>, which, I realize does not answer your question, sorry, but may be of intest for others.
</body>
</html>

答案 10 :(得分:0)

我在这里找不到合适的方法,所以我用了 具有linear-gradientex CSS length units的背景图片。

不幸的是,这意味着使用不同的字体将使删除线显示在稍微不同的位置(如果字体的x高度不同)。

.container {
  width: 300px;
}

.multiline-strikethrough {
  display: inline;
  background-image: linear-gradient(transparent 0.8ex, red 0.8ex, red 1.5ex, transparent 1.5ex);
}

.alt-1 {
  font-family: sans-serif;
  font-size: 2rem;
}

.alt-2 {
  font-family: sans-serif;
  font-size: 4rem;
  line-height 1;
}
<div class="container">
  <p class="multiline-strikethrough">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisis, odio a consequat eleifend, leo ex tincidunt magna.</p>
</div>

<div class="container">
  <p class="multiline-strikethrough alt-1">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisis, odio a consequat eleifend, leo ex tincidunt magna.</p>
</div>

<div class="container">
  <p class="multiline-strikethrough alt-2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisis, odio a consequat eleifend, leo ex tincidunt magna.</p>
</div>