【问题标题】:CSS - Oblique border without fillingCSS - 不填充的斜边框
【发布时间】:2020-10-23 14:50:09
【问题描述】:

我有一个 div,我需要一个左侧倾斜的边框,但我只能找到元素填充颜色的解决方案。 我只需要边框,如下图:

我该怎么做?

我的实际代码:

HTML

<div class="arrow">
    <span id="time">30 mins</span>
    <img src="assets/up_arrow.png" />
</div>

CSS

.arrow {
    display: inline-block;
    text-align: right;
    text-decoration: none;
    margin-left: 35%;
    padding: 5px 0 5px 0;
    border-style: solid;
    border-width: 1px 0 1px 0;
    border-color: #929A9D transparent #929A9D transparent;
 }

 .arrow > img {
     vertical-align: middle;
     width: 12px;
     height: 12px;
 }

【问题讨论】:

标签: html css


【解决方案1】:

TRY THIS DEMO

HTML 和 CSS

#a {
    position: relative;
    width: 120px;
    padding: 10px 20px;
    font-size: 20px;
    position: relative;
    margin-left:50px;

    color: #2E8DEF;

    border: 3px solid #2E8DEF;
    border-left:0;
}
#a:before {
    content: " ";
    position: absolute;
    display: block;
    width: 50%;
    height: 100%;
    top: -3px;
    left: -30px;
    z-index: -1;

    border:3px solid #2E8DEF;
    border-right: 0px;

    transform-origin: bottom left;
    -ms-transform: skew(-30deg, 0deg);
    -webkit-transform: skew(-30deg, 0deg);
    transform: skew(-30deg, 0deg);
}
<div id="a">

    Hello

</div>

【讨论】:

  • 很好的答案,唯一的问题可能是如果我的 div 在一个复杂的页面中,可能很难管理 css 以始终与 div 重合。
  • 谢谢Nodiink,我认为这在你第一次创建时并不复杂。
【解决方案2】:

我已经使用边框和伪元素之前创建了形状。希望这会有所帮助。

.ClassicBorder {
  width: 200px;
  padding: 4px 0;
  border: 2px solid #999;
  position: relative;
  margin-left: 9px;
  text-align: center;
  font-size: 25px;
}

.ClassicBorder:before {
  height: 36px;
  width: 40px;
  border: 2px solid #999;
  content: '';
  position: absolute;
  border-right: 0px;
  border-top: 0px;
  transform: skew(340deg);
  -webkit-transform: skew(340deg);
  -moz-transform: skew(340deg);
  background: #fff;
  left: -9px;
  top:0px;
}
<div class="ClassicBorder">
  30 Mins >
</div>

【讨论】:

  • 作为另一个答案(您的解决方案非常相似):很好,唯一的问题可能是,如果我的 div 位于复杂页面中,则很难管理 css 以始终与 div 重合。
【解决方案3】:

我找到了一种更优雅的方式,更容易维护,基于这个答案:https://stackoverflow.com/a/24691352/5287860

新代码:

.row {
    display: block;
    overflow: hidden;
    background: linear-gradient(to right, #fff, transparent, #fff, #fff);
}
.arrow {
    display: inline-block;
    text-align: center;
    text-decoration: none;
    padding: 5px 0 5px 5px;
    border-style: solid;
    border-width: 1px 0px 1px 1px;
    border-color: #929A9D transparent #929A9D #929A9D;
    transform: skewX(-20deg);
    -ms-transform: skewX(-20deg);
    -webkit-transform: skewX(-20deg);
    width: 100px;
}
.arrow > div {
    display: inline-block;
    text-decoration: none;
    transform: skewX(20deg);
    -ms-transform: skewX(20deg);
    -webkit-transform: skewX(20deg);
}
.arrow > img {
    vertical-align: middle;
    width: 12px;
    height: 12px;
    text-decoration: none;
    transform: skewX(20deg);
    -ms-transform: skewX(20deg);
    -webkit-transform: skewX(20deg);
}
<div class="row">
    <div class="arrow">
        <div><span id="">30 mins</span></div>
        <img src="assets/up_arrow.png" />
    </div>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 2019-02-05
    • 2022-01-24
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2020-11-08
    相关资源
    最近更新 更多