html - 使用 CSS 布局(或者我应该放弃并使用表格?)

标签 html css

我正在尝试根据屏幕截图实现以下布局。

Layout using tables

主要特点是

  • 屏幕分为 3 个区域(列);
  • 左/右列固定宽度;
  • 中间列根据浏览器宽度扩展
  • 右栏分割为两个区域
  • 底部区域固定大小,始终在底部
  • 顶部区域根据浏览器高度扩展

使用 HTML 表格我花了大约 2 个小时来生成上面的屏幕截图,具有上述功能。

折腾了两天 CSS,我无法像上面那样显示,我对 CSS 的尝试和相关的屏幕截图如下:

<html> 
<head> 
    <title>My Layout</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type="text/css"> 
    body{
        height:100%;
        background:beige;
    }

    #header { 
        width:100%;
        height:60px;
        text-align:center;
        background:#A7C942; 
        color:#fff;
        float:left; 
        font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
        font-size:2em;
    } 

    #leftDiv { 
        float:left; 
        width:150px;
        height:90%;
        background:aquamarine; 
    } 
    #midDiv { 
        float:left; 
        width:auto; 
        height:90%;
        background:lightsalmon; 
        display:block;
    } 
    #rightDiv { 
        float:right; 
        width:365px; 
        height:90%;
        background:green; 
        display:block;
    }


    #topRow {
        background-color:lightgoldenrodyellow;
    }

    #bottomRow {
        background-color:lightpink;
        height:200px;
    }
    </style> 
</head> 

<body> 
<div id="body"> 
    <div id="main"> 
        <div id="header">my header</div>

        <div id="leftDiv">
            <p>LEFT</p>
        </div> 

        <div id="midDiv">
            <p>MIDDLE</p>
        </div> 

        <div id="rightDiv">
            <p>RIGHT</p>
            <div id="topRow">
                TOP
            </div>
            <div id="bottomRow">
                BOTTOM
            </div>
        </div>
    </div> 
</div> 
</body> 
</html>

CSS 截图: Layout using CSS

CSS 尝试的问题是:

  • 中间col不膨胀(鲑鱼色部分);
  • 取而代之的是突然出现白色;
  • 不能让粉色区域一直停留在底部
  • 无法让黄色区域上下拉伸(stretch)
  • 不需要的环绕(即右侧区域位于左侧中间区域下方)

因此,我将使用表格释放我的解决方案,除非一些顽固的 CSS 狂热者提供有效的答案来拯救:-)

更新 很好的答案,在这次更新时有 4 个。我在 Firefox 和 Chrome 上尝试了所有 4 个,每个答案都是可以接受的。但我只能选择一个作为可接受的答案,我会选择仅使用 css 和绝对定位(没有 flexbox 或 css-tables)的简单明了的答案。

非常感谢@matthewelsom、@Pangloss、@Shrinivas、@Paulie_D;我相信任何偶然发现您的答案的人都会发现它对他们的用例很有用。为大家点赞,感谢您的努力!

最佳答案

看看这个 fiddle .

它使用基本的 CSSHTML 并且没有框架

允许这种定位的关键元素是这些 css 属性:

演示使用这些属性。

这是片段。

body {
  background: beige;
  margin: 0;
}
#header {
  width: 100%;
  height: 60px;
  text-align: center;
  background: #A7C942;
  color: #fff;
  font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
  font-size: 2em;
}
#leftDiv {
  position: absolute;
  float: left;
  width: 150px;
  top: 60px;
  bottom: 0;
  background: aquamarine;
}
#midDiv {
  position: absolute;
  float: left;
  top: 60px;
  bottom: 0;
  left: 150px;
  right: 365px;
  min-width: 50px;
  background: lightsalmon;
}
#rightDiv {
  position: absolute;
  float: right;
  width: 365px;
  top: 60px;
  bottom: 0;
  right: 0;
  background: green;
}
#topRow {
  position: absolute;
  width: 100%;
  top: 0;
  bottom: 50px;
  min-height: 20px;
  background-color: lightgoldenrodyellow;
}
#bottomRow {
  position: absolute;
  background-color: lightpink;
  width: 100%;
  height: 50px;
  bottom: 0;
}
<div id="body">
  <div id="main">
    <div id="header">my header</div>
    <div id="leftDiv">
      <p>LEFT</p>
    </div>
    <div id="midDiv">
      <p>MIDDLE</p>
    </div>
    <div id="rightDiv">
      <div id="topRow">TOP</div>
      <div id="bottomRow">BOTTOM</div>
    </div>
  </div>
</div>

关于html - 使用 CSS 布局(或者我应该放弃并使用表格?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165379/

相关文章:

html - 添加文本溢出 : ellipsis; to table cell

html - 图片垂直居中修复代码

javascript - 如何根据javascript变量更改html标题innertext

html - CSS网格网格列跨度问题

javascript - 移动设备上的 Bootstrap 聊天小部件

java - HTML5 控件在 JavaFX webview 中不起作用

jquery - 随着添加/删除更多缩略图以适应其父 DIV,缩略图的高度会动态变化

html - 使 iframe 成为其容器的 100% 宽度

javascript - 水平显示卡片列表,带有 Angular 和 MaterializeCSS 的 HTML/CSS

javascript - 通过jquery制作元素 "css-absolute"时奇怪的跳转