【问题标题】:How can I put a vertical line down the center of a div?如何在 div 的中心放置一条垂直线?
【发布时间】:2010-11-13 21:00:41
【问题描述】:

如何在 div 的中间放置一条垂直线?也许我应该在 div 中放置两个 div 并在其中一个上放置一个左边框,在另一个上放置一个右边框?我有一个 DIV 标签,我需要在左边放一个 ascx(它会不时与另一个 ascx 交换),然后在左边放一个静态 ascx。关于我应该如何做到这一点的任何想法?也许我回答了我自己的问题。

任何指针都会很棒

【问题讨论】:

  • 只是为了检查——你想要两列,一列包含一个 ascx,另一列包含另一个 ascx,用一条线将它们从中间分开,对吗?
  • 什么是 ascx?

标签: css html


【解决方案1】:

也许这对你有帮助

.here:after {
    content:"";
    position: absolute;
    z-index: -1;
    top: 0;
    bottom: 0;
    left: 50%;
    border-left: 2px dotted #ff0000;
    transform: translate(-50%);
}

div {
    margin: 10px auto;
    width: 60%;
    height: 100px;
    border: 1px solid #333;
    position:relative;
    text-align:center
}
<div class="here">Content</div>

这是一个JSFiddle 演示。

【讨论】:

  • 根据您的 css 和 DOM 的设置方式,您可能需要将 z-index: -1 更改为 z-index: 0。如果此答案中的 div 和类在浏览器的开发者控制台中可见,但没有出现该行,请先尝试。
  • 您可以将z-index:-1 替换为pointer-events:none,并将:after 保留在任何内容之上
【解决方案2】:

虽然这个问题是 9 年前提出的,但很多答案都会“有效”。 CSS 已经发展,您现在可以在一行中完成,而无需使用 calc

一个班轮(2018)答案:

background: linear-gradient(#000, #000) no-repeat center/2px 100%;

这是如何工作的

  1. linear-gradient(#000, #000) 这会创建一个background-image,以便我们以后可以使用background-size 来包含它。
  2. no-repeat 当我们将 background-size 放在上面时,这会阻止渐变重复。
  3. center - 这是background-position 这是我们放置“潜水线”的地方
  4. /2px 100% - 图片宽度为 2 像素,并且是您放入的元素的 100%。

这是扩展版:

  background-image: linear-gradient(#000, #000);
  background-size: 2px 100%;
  background-repeat: no-repeat;
  background-position: center center;

【讨论】:

  • 在 ie11 中也可以使用
  • 在我的解决方案中,这条线与上方的边框相匹配。在我放置您的解决方案的 div 上,这条线偏离了 1px。我在最后添加了这个 css 规则来修复它: background-position-x: calc(50% - 1px);
  • 您愿意将其放入代码 sn-p 中吗?
【解决方案3】:

这是一种更现代的方式来在 div 上画一条线。只需要一点 CSS:

.line-in-middle {
    width:400px;
    height:200px;
	  background: linear-gradient(to right, 
	                              transparent 0%, 
	                              transparent calc(50% - 0.81px), 
	                              black calc(50% - 0.8px), 
	                              black calc(50% + 0.8px), 
	                              transparent calc(50% + 0.81px), 
	                              transparent 100%); 
	}
<div class="line-in-middle"></div>

适用于所有现代浏览器。 http://caniuse.com/#search=linear-gradient

【讨论】:

  • @Kamil Kiełczewski 只是想提醒其他人,因为他提供的链接上说支持 IE11,这是真的,但代码不起作用。
  • @JerickAllanSernalDimaano 在我安装的 IE 11 中工作,11.413.15063.0。您看到它在哪个版本中不起作用?你在看什么?
  • @Samuel Neff,我的 IE 版本是 11.713.10586.0。这是我看到的:imgur.com/a/sffzK
  • @JerickAllanSernalDimaano 很有趣。如果我更改网页上的缩放设置(ctrl-+),我可以做到这一点,即使我将其设置回 100%(直到刷新),它也无法修复。感谢分享截图。 IE 很糟糕,但我们需要处理它。 :(
【解决方案4】:

刚刚测试过这个;作品:

<div id="left" style="width:50%;float:left;background:green;">left</div>
<div id="right" style="margin-left:50%;border-left:solid 1px black;background:red;">right</div>

【讨论】:

    【解决方案5】:

    我认为您需要一个带有背景图像的包装 div。如果没有,则不能保证边框从上到下一直走。

    <div class="wrapper">
        <div>Float this one left</div>
        <div>float this one right</div>
    </div>
    

    *请务必在左右之间留出空间以显示图像。

    你需要一个看起来像这样的样式:

    .wrapper{background:url(img.jpg) 0 12px repeat-y;}
    

    【讨论】:

      【解决方案6】:

      这是我的版本,使用linear-gradient的渐变中间线

      .block {
            width:400px;
            height:200px;
            position:relative;
       }
      .block:before {
            content:"";
            width:1px;
            height:100%;
            display:block;
            left:50%;
            position:absolute;
      	    background-image: -webkit-linear-gradient(top, #fff, #000, #fff);
            background-image: -moz-linear-gradient(top, #fff, #000, #fff);
            background-image: -ms-linear-gradient(top, #fff, #000, #fff);
            background-image: -o-linear-gradient(top, #fff, #000, #fff);
            background-image: linear-gradient(top, #fff, #000, #fff);
      	}
      &lt;div class="block"&gt;&lt;/div&gt;

      【讨论】:

        【解决方案7】:

        我认为您的多重 DIV 方法将是解决此问题的最明智的方法:

        <DIV>
           <DIV style="width: 50%; border-right: solid 1px black">
              /* ascx 1 goes here */
           </DIV>
           <DIV style="width: 50%">
              /* ascx 2 goes here */
           </DIV>
        </DIV>
        

        【讨论】:

        • 刚刚检查过;除非您编辑并添加浮动,否则这是行不通的。
        • 如果左边比右边短,那么我认为边框不会跨越整个高度。
        【解决方案8】:

        三个 div?

        <div>
           <div>
              /* ascx 1 goes here */
           </div>
           <div style="width:1px; background-color: #000"></div>
           <div>
              /* ascx 2 goes here */
           </div>
        </div>
        

        【讨论】:

        • 你需要问自己一件事......当你在所有内部 div 上的高度不同时它会起作用
        猜你喜欢
        • 2023-01-03
        • 2018-09-27
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        相关资源
        最近更新 更多