【问题标题】:Style for a slash斜线样式
【发布时间】:2015-08-08 01:46:07
【问题描述】:

我想在两个数字之间添加一条大斜线,以获得如下图所示的输出:

我正在尝试使用/ 添加斜杠,但它做得不太正确(它显示在数字之后,而不是在数字下方)。有没有办法让输出接近上图​​?

<div class="box">
    <span class="top">41</span>
    <span class="line">&#47;</span>
     <span class="bottom">50</span>
</div>

.top {
    font-size: 100px;
    font-weight: bold;
}

.line {
    font-size: 100px
}

JSFiddle: http://jsfiddle.net/jxk8fvus/

【问题讨论】:

  • 浏览器支持要求?

标签: html css css-shapes


【解决方案1】:

使用倾斜变换

此方法利用以下内容:

  • 带有transform: skew(-45deg) 的伪元素,其border-left 会生成类似于斜线字符的行。
  • 包含数字的两个span 的绝对定位。像span 这样的分子相对于左上角定位,而像span 这样的分母相对于右下角定位。

如果您想支持 IE8 及更低版本,这种方法的一个潜在缺点是浏览器支持。

.box {
  position: relative;
  height: 150px;
  width: 150px;
}
.top, .bottom {
  position: absolute;
  font-weight: bold;
}
.top{
  top: 0px;
  left: 0px;
  font-size: 100px;
}
.bottom {
  bottom: 0px;
  right: 0px;
  font-size: 25px;
}
.box:after {
  position: absolute;
  content: '';
  bottom: 0px;
  right: 0px;
  height: 60%;
  width: 0%;
  border-left: 1px solid;
  transform: skew(-45deg);
  transform-origin: top left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class="box">
  <span class="top">41</span>
  <span class="bottom">50</span>
</div>

使用斜线字符

此方法利用以下内容:

  • 产生斜线的普通斜线字符。
  • 对于数字和斜线字符,display 属性设置为 inline-block 的容器元素。
  • 为每个容器设置适当的 vertical-align 设置,使它们看起来像一个分数。

如果您想支持旧版本的 IE,这种方法是有利的。缺点是斜线字符不允许对斜线的角度进行太多控制。

.top {
  font-size: 50px;
  vertical-align: top;
  margin-top: 10px;
}
.bottom {
  font-size: 25px;
  vertical-align: bottom;
  margin-bottom: 20px;
}
.line {
  font-size: 100px;
  vertical-align: middle;
}
.top, .bottom{
  font-weight: bold;
}
.box * {
  display: inline-block;
}
<div class="box">
  <span class="top">41</span><!--
  --><span class="line">&#47;</span><!--
  --><span class="bottom">50</span>
</div>

注意:第二个sn-p中的&lt;!-- --&gt;是为了避免inline-block元素之间有多余的空格。


使用渐变

此方法利用以下内容:

  • 有角度的linear-gradient 设置为父框容器的background
  • 容器元素的display 属性设置为inline-block 的数字以及适当的vertical-align 设置。

这种方法的优点是它不使用任何额外的真实/伪元素。缺点是浏览器对渐变的支持相对较低。

.box {
  height: 125px;
  width: 125px;
  font-size: 100px;
  background: linear-gradient(to top left, transparent 49.5%, black 49.5%, black 50.5%, transparent 50.5%);
  background-size: 75% 75%;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}
.top {
  font-size: 75px;
  vertical-align: top;
  margin-top: 10px;
}
.bottom {
  font-size: 25px;
  vertical-align: bottom;
  margin-left: -10px;
}
.box * {
  display: inline-block;
  font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class="box">
  <span class="top">41</span>
  <span class="bottom">50</span>
</div>

【讨论】:

    【解决方案2】:

    这样就可以了:

    jsFiddle

    Updated Fiddle

    .line {
            width: 80px;
            height: 80px;
            border-bottom: 1px solid black;
            -webkit-transform: translateY(50px) translateX(5px) rotate(135deg);
                -ms-transform: translateY(50px) translateX(5px) rotate(135deg);
                 -o-transform: translateY(50px) translateX(5px) rotate(135deg);
                    transform: translateY(50px) translateX(5px) rotate(135deg);
            position: absolute;
    }
    

    玩弄数字。

    【讨论】:

    • Itay,这仅适用于 Chrome。 Firefox 和 IE 的输出很奇怪
    • @chiapa 因为浏览器前缀。从中删除 -webkit-
    猜你喜欢
    • 2011-09-19
    • 2023-03-12
    • 1970-01-01
    • 2011-03-12
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多