边框长度小于div宽度?


115

我有以下代码

div {
   width:200px;
   border-bottom:1px solid magenta;
   height:50px;   
}

演示

div宽度为200px,因此border-bottom也是200px,但是如果我希望border-bottom-bottom仅100px而又不更改div宽度,该怎么办?

Answers:


224

您可以使用伪元素。例如

div {
  width   : 200px;
  height  : 50px;   
  position: relative;
  z-index : 1;
  background: #eee;
}

div:before {
  content : "";
  position: absolute;
  left    : 0;
  bottom  : 0;
  height  : 1px;
  width   : 50%;  /* or 100px */
  border-bottom:1px solid magenta;
}
<div>Item 1</div>
<div>Item 2</div>

无需出于演示目的使用额外的标记。IE8也支持:after。

编辑:

如果你需要一个右对齐边框,只是改变left: 0right: 0

如果您需要居中对齐的边框,只需设置 left: 50px;


这也是我的技术,但请注意,它将在div的左半部分显示边框。如果要居中,请给div:before left: 50px
Chowlett

问题没有指定边框应显示在哪个位置,因此我没有考虑其他位置
Fabrizio Calderan

5
如果底部边框的宽度是50%,并且您希望它居中,则样式应left: 25%为25%+ 50%+ 25%
skift

5
是的,我知道在此示例中它可以工作。但是对于其他可能会尝试使其响应速度类似的事情,您可能需要使用%,因为这种情况我需要答案。
2014年

4
使用margin: autoright: 0left: 0:before到中心的直线。如果有帮助,请支持。
Ale_info

40

另一种方法(在现代浏览器中)是使用负扩散盒阴影。查看此更新的小提琴:http : //jsfiddle.net/WuZat/290/

box-shadow: 0px 24px 3px -24px magenta;

我认为最安全,最兼容的方式是上面接受的答案。只是以为我会分享另一种技术。


9

您可以使用线性渐变:

div {
    width:100px;
    height:50px;
    display:block;
    background-image: linear-gradient(to right, #000 1px, rgba(255,255,255,0) 1px), linear-gradient(to left, #000 0.1rem, rgba(255,255,255,0) 1px);
	background-position: bottom;
	background-size: 100% 25px;
	background-repeat: no-repeat;
    border-bottom: 1px solid #000;
    border-top: 1px solid red;
}
<div></div>


8

我像这样在h3标签下添加了一行

<h3 class="home_title">Your title here</h3> 
.home_title{
    display:block;
}
.home_title:after {
    display:block;
    clear:both;
    content : "";
    position: relative;
    left    : 0;
    bottom  : 0;
    max-width:250px;
    height  : 1px;
    width   : 50%;  /* or 100px */
    border-bottom:1px solid #e2000f;
    margin:0 auto;
    padding:4px 0px;
}

4

边框大小不能与div本身不同。

解决方案是在正下方,居中或绝对定位下添加另一个div,并具有所需的1像素边框和仅1像素高度。

http://jsfiddle.net/WuZat/3/

我将原始边框留在其中,以便可以看到宽度,并有两个示例-一个具有100宽度的示例,另一个具有100宽度居中的示例。删除您不想使用的那个。


3

派对晚了,但是对于任何想要设置两个边框(在我的情况下在底部和右侧)的人,您可以在接受的答案中使用该技术,并在第二行中添加:after psuedo-element,然后只需更改属性即可因此:http//jsfiddle.net/oeaL9fsm/

div
{
  width:500px;
  height:500px;   
  position: relative;
  z-index : 1;
}
div:before {
  content : "";
  position: absolute;
  left    : 25%;
  bottom  : 0;
  height  : 1px;
  width   : 50%;
  border-bottom:1px solid magenta;
}
div:after {
  content : "";
  position: absolute;
  right    : 0;
  bottom  : 25%;
  height  : 50%;
  width   : 1px;
  border-right:1px solid magenta;
}

2

我有情况在div容器中的图片之间有一些底部边框,而最好的一行代码是 -border-bottom-style:inset;


2
div{
    font-size: 25px;
    line-height: 27px;
    display:inline-block;
    width:200px;
    text-align:center;
}

div::after {
    background: #f1991b none repeat scroll 0 0;
    content: "";
    display: block;
    height: 3px;
    margin-top: 15px;
    width: 100px;
    margin:auto;
}

2

我在项目中做了类似的事情。我想在这里分享。您可以将另一个div作为孩子添加,并为其设置一个较小的边框,并使用常规CSS将其放置在左侧,中央或右侧

HTML代码:

    <div>
        content 
        <div class ="ac-brdr"></div>
    </div>

CSS如下:

   .active {
    color: magneta;
  }
   .active .ac-brdr {
        width: 20px;
        margin: 0 auto;
        border-bottom: 1px solid magneta;
  }

1

边框具有整个h​​tml元素。如果要使用下半边框,则可以将其与其他一些可识别的块(例如跨度)一起包装。

HTML代码:

<div> <span>content here </span></div>

CSS如下:

 div{
    width:200px;
    height:50px;   
    }
 span{
        width:100px;
        border-bottom:1px solid magenta;   
    } 


1

我只是使用了与之相反的方法:after::after因为我需要准确地使我的底部边框1.3rem更宽:

当我用我的元素得到了超级变形:before,并:after在同一时间,因为元素与水平对齐display: flexflex-direction: rowalign-items: center

您可以使用它来制作更宽或更窄的东西,或者可能是任何数学尺寸的mod:

a.nav_link-active {
  color: $e1-red;
  margin-top: 3.7rem;
}
a.nav_link-active:visited {
  color: $e1-red;
}
a.nav_link-active:after {
  content: '';
  margin-top: 3.3rem;      // margin and height should
  height: 0.4rem;          // add up to active link margin
  background: $e1-red;
  margin-left: -$nav-spacer-margin;
  display: block;
}
a.nav_link-active::after {
  content: '';
  margin-top: 3.3rem;      // margin and height should
  height: 0.4rem;          // add up to active link margin
  background: $e1-red;
  margin-right: -$nav-spacer-margin;
  display: block;
}

抱歉,这是SCSS,只需将数字乘以10,然后将变量更改为一些正常值即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.