【问题标题】:CSS position layer on top - margin & padding, overflow issues顶部的 CSS 位置层 - 边距和填充,溢出问题
【发布时间】:2014-02-28 07:36:14
【问题描述】:

编辑:问题已解决..

我将 red_are div 放在 content_box 中,对于高度,我通过 jquery 获取它,然后将其位置设置为 margin-top:-(red_area HEIGHT + content_nox PADDING)px; ..

..如果有人有更好的想法,请分享..


我正在尝试制作一个内容容器,其中我将在 RED div 的顶部有一个图标或文本(在代码中),问题是 RED div 在下一个 DIV 上溢出,我想要的是“content_box”应该根据 RED div 的高度自动下降。第二个问题是 RED div 的位置,目前我设置了 margin-bottom:-50px;但我想要的是,它会自动计算高度并将其定位在顶线(边框)上方的中间(垂直).. 下面是我的代码并尝试.. 感谢您的帮助..

以下是我想要实现的..

参考:http://jsfiddle.net/Dvej8/

代码:

  <div class="cb_container">
    <div class="red_area">          
       text <br />
       text <br />
       text <br />
       text <br />
       text <br />
       text <br />
       text <br />
       text <br />
    </div>
    <div class="content_box">
      <h3>Title of Container</h3>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    </div>
  </div>

【问题讨论】:

  • 下面的答案去掉了与 content_box 重叠的红色。问题的第二部分(垂直居中)是什么意思?是否要将红色框放在 content_box 的顶部,使 content_box 的上边框直接穿过红色框的中心?
  • 谢谢 Irvin,我刚刚添加了图片以使我的问题更清楚我到底想要什么。再次感谢..
  • 太棒了,那张照片真的很有帮助。对此有什么特别的限制吗?特别是这三个问题:我可以移动 DOM 的各个部分吗?还是 red_area 的高度是固定的?是否允许使用 JavaScript?
  • 感谢 Irvin,在一个完美的世界里,我应该不用 jQuery 就可以做到。但我认为我不能只用 CSS 来做到这一点。红色区域的高度没有定义,它可以是任何大小的任何东西,所以对于位置,我可以像 margin-top 一样做:-(红色的高度 + content_box Padding)px;或者可能是如果有一个 CSS 方式来使用 display:table;并垂直对齐..
  • 如果您自己解决了问题并且接受的答案并没有给出所有内容,您可以发布自己的答案 - 与其他地方不同,如果问题不包括“问题已解决”,我们更喜欢”。谢谢!

标签: css


【解决方案1】:

这是一个纯 CSS3 的解决方案,不需要任何 JQuery(在 Chrome、Safari 和 Firefox 上测试)并响应我想分享的可变高度的 red_area。

JSFiddle Here

纯 CSS 解决方案的主要问题是基于百分比的计算是基于对象的高度(例如,margin-top: 50% 添加的间距等于宽度的 50%,而不是高度)。另一个问题是 content_box 还需要识别 red_area 的高度,如果没有 JQuery,这似乎是不可能的。

此解决方案使用两个技巧来克服这些障碍:

  1. Transform 的 translateY() (CSS3) 可以移动 div相对于其高度

  2. 两个相邻的 div(没有边距)看起来是一个 div,即使有边框(经过正确调整)

相关 CSS:

.content_box {
    padding:25px;
    border-right:1px SOLID #e4e4e4;
    border-bottom:1px SOLID #e4e4e4;
    border-left:1px SOLID #e4e4e4;
    border-radius:2px;
}
.red_area_container {
    border-right:1px SOLID #e4e4e4;
    border-top:1px SOLID #e4e4e4;
    border-left:1px SOLID #e4e4e4;
    height:50%;
    transform: translateY(50%);
    -ms-transform: translateY(50%);
    -webkit-transform: translateY(50%);
}
.red_area {
    display:block;
    margin:0 auto;
    text-align:center;
    background:red;
    width:50%;
    transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
}

我们用 div 包裹 red_area。然后我们将 red_area 向上平移 50% 的高度,使其与顶部边框居中。然后我们将 red_area_container 向下平移 50% 以考虑 red_area 创建的额外空间。由于我们设置边界的方式,结果看起来像一个 div。尝试在 red_area 中添加/删除内容——这个解决方案可以解决这个问题!

想出这个解决方案有点有趣:)

【讨论】:

  • 一句话:太棒了.. 这是一个完美的解决方案,非常感谢,我知道这很难完成,但只能用 css 完成,我的 css 知识有限:) 谢谢一百万并且我敢肯定,很多人会喜欢这个..再次感谢队友..
【解决方案2】:

如果我是正确的,你想这样做:

http://jsfiddle.net/Dvej8/2/

正确吗?

我删除了.red_area 中的margin-bottom: -50px。这就是问题所在。 Margin: 0 auto; 足够放在中间了。

编辑:将padding 添加到容器顶部并设置margin-bottom。我可以问你为什么想要那个吗?我有兴趣。无论如何,这就是它的方式:

http://jsfiddle.net/Dvej8/4/

【讨论】:

  • 再次感谢,但第 2 版和第 3 版没有任何变化。我想要它,因为我设计的那部分......干杯
  • 我忘了设置正确的链接,这就是原因。再检查一遍。好的,谢谢你的澄清。
  • :) 我不想在 content_box 中添加填充,我只想让它在可能的情况下自动浮动..
  • 自动浮动是什么意思?你不能用浮点数得到它。这是不可能的。
【解决方案3】:
<div class="cb_container">
    <div class="red_area">
        <ol>
            <li>
                <p>text</p>
           </li>
           <li>
               <p>text</p>
           </li>
            <li>
               <p>text</p>
           </li>
            <li>
               <p>text</p>
           </li>
            <li>
               <p>text</p>
           </li>
       </ol>
   </div>
   <div class="content_box">
       <p>More text within here blah blah</p>
   </div>
</div>

CSS:

p,h3{margin:0px;padding:2px;}
.cb_container{
    width:400px;
}
.red_area{
    background:#FF0000;
    width:70%;
    margin:auto;
    position:relative;
    top:50px;
}
.red_area>ol{
    list-style-type:none;
    margin:0px;
    padding:0px;
}
.content_box{
    border:1px solid #CCCCCC;
    padding:50px 10px 10px 10px;
}   

【讨论】:

  • 谢谢,我已经以不同的方式对其进行了整理,对于红色区域的高度,我正在使用 jQuery,然后设置位置.. 干杯
  • @user1718343 这有点绕:p。最好尽可能多地使用 CSS(尽可能多地使用),因为不必要的 javascipt 会减慢您的页面速度。取决于页面有多大以及这是为了什么
  • 感谢 Bento .. 问题是在 RED div 中可以有任何类型的内容、图像、文本、
      所以不能像添加 top:50px 那样通过修复它来完成中等垂直验证;或将 50px 添加到 content_box,这是一个固定的解决方案,我将动态加载内容并且不知道红色区域的高度.. 例如,如果我在您的示例中更改红色区域中的文本,这就是它的外观.. @ 987654321@
  • @user1718343 啊啊啊我明白了!是的,那么需要 javscript 来更改高度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多