【问题标题】:CSS Display in Grid or table网格或表格中的 CSS 显示
【发布时间】:2017-04-05 17:09:28
【问题描述】:

大家好,我需要帮助在 CSS 中显示布局。这是我希望布局显示的样子。

这是我目前在 CSS 中的内容,但无法让菜单区域完全向下展开高度。有什么建议么?我正在使用显示网格作为布局。

.page{
  display: grid;
  grid-template-columns:29% 71%;
  justify-content: flex-start;
  align-content: start; 
}
.section-header{
 grid-column: 1/3;
 display:grid
 grid-row:row;
 background-color:blue;
 color:#fff;
}
.zone-menu-wrapper{
grid-row:1/3;
background-color:#286dc5;
}
.zone-topper-wrapper{
grid-row:1/3;
}
.section-main{
 grid-column:2/3;
 background-color:orange;
}
.section-footer{
  grid-column: 2/3;
  background-color:yellow;
}
.zone-branding-wrapper{
  grid-column:2/3;
}

.zone-menu{
width:29%;
display:inline-block;
}
<div class="page">
	<header class="section-header">
		<div class="zone-topper-wrapper">Top Zone</div>
		<div class="zone-menu-wrapper">Menu Zone</div>
	</header>
	<main class="section-main">
    <div class="zone-branding-wrapper">Branding Zone</div>
		<div class="zone-content-wrapper">Content Zone</div>
	</main>
	<footer class="section-footer">
		<div class="zone-footer-wrapper">Footer Zone</div>
	</footer>
</div>
</pre>

【问题讨论】:

  • 你尝试过 CSS 这个标记吗?
  • FWIW,网格列是 not that widely supported
  • 我推荐使用 Flexbox,你可以查看Guide here
  • @Hipady 我尝试使用 Flexbox,但显示布局并不是那么简单。
  • 也许你可以结合使用宽度、高度、位置和浮动 CSS 属性来安排你的布局,它们是基本属性,我认为使用它们非常简单

标签: html css grid frontend


【解决方案1】:

这是一个flexbox 解决方案,它将为您提供比grid columns 更大的支持。如果您不喜欢 flexbox,您可以随时使用基于浮动的解决方案,它会获得更大的支持。

我不会详细介绍,但关键要点是:

  • flex-grow,告诉元素占用其父元素的剩余空间。非常方便地将元素拉伸到未知宽度,也很灵活。
  • min-height: 100vhbody 中,如果没有足够的内容来填充它,这允许布局占据整个视口。这也提供了flex-grow 可以成长为的上下文。没有min-height: 100vh; flex-grow 没有任何空间来拉伸元素。
  • 100vh 对于min-height,使用视口单位来确定body 元素可以达到的最小高度。 100vh,表示使用 100% 的视口垂直高度 (vh)。

body {
  display: flex;
  flex-direction: column;
  margin: 0;
  min-height: 100vh;
}

.wrap {
  display: flex;
  flex-direction: row;
  flex-grow: 1;
  background-color: indianred;
}

.content {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}

header {
  background-color: darkseagreen;
}

aside {
  background-color: skyblue;
}

main {
  flex-grow: 1;
  background-color: gold;
}
<header>
  Header
</header>

<div class="wrap">

  <aside>
    Sidebar
  </aside>
  
  <div class="content">
  
    <main>
      Main
    </main>
    
    <footer>
      Footer
    </footer>
    
  </div>
  
</div>

【讨论】:

  • 我猜你的标记似乎比我的容易。您可以尝试在我拥有的标记上使用 flex 吗?
  • 我可以,但你的标记并没有那么不同。您应该能够以最小的努力根据您的需要进行修改。我在您的标记中发现了一个缺陷,因为左侧的侧边栏似乎包含在不应包含的元素中(根据您的图表)。
  • @hungarstar 我希望我可以更轻松地更改标记,但由于它是一个 cms 平台,我控制它并不难。如果您使用上面的标记帮助我进行布局,我将非常感谢您的帮助。
  • @AE86 标记中的哪个元素应该是左侧的侧边栏?据我所知,您的标记可能无法实现。有时这并不容易,您必须亲自动手(在 CMS 中更改模板)。
  • 我希望我可以更改我的标记,但我无权访问后端文件和访问权限。所以我只能为我目前拥有的标记进行布局。
【解决方案2】:

使用网格,您可以只使用所需的最少语义标记:

body {
  display: grid;
  grid-template-columns: 29% 71%;
  grid-template-rows: auto 1fr auto;
  grid-template-areas: "header header" "nav main" "nav footer";
  height: 100vh
}

header {
  grid-area: header ;
}

nav {
  grid-area: nav ;
  grid-column: 1;
}

main,
footer {
  grid-column: 2;/* or grid-area for each of them */
}

/*makup*/
header,
nav {
  background: tomato;
}

main {
  background: turquoise
}

footer {
  background: orange;
  }
body>* {
  padding:1em;
  box-shadow:0 0 1px
}
<header>header</header>
<nav> nav </nav>
<main> main</main>
<footer>footer</footer>

【讨论】:

    【解决方案3】:
    <div class="page">
        <header class="section-header">
            <div class="zone-topper-wrapper">Top Zone</div>
    
        </header>
      <div class="zone-menu-wrapper">Menu Zone</div>
        <main class="section-main">
        <div class="zone-branding-wrapper">Branding Zone</div>
            <div class="zone-content-wrapper">Content Zone</div>
        </main>
        <footer class="section-footer">
            <div class="zone-footer-wrapper">Footer<br> Zone</div>
        </footer>
    </div>
    

    CSS

    .page{
      display: grid;
      grid-template-columns:29% 71%;
      justify-content: flex-start;
      align-content: start; 
    }
    .section-header{
     grid-column: 1/3;
     display:grid
     grid-row:row;
     background-color:blue;
     color:#fff;
    }
    .zone-menu-wrapper{
    grid-row:2/4;
    background-color:#286dc5;
    }
    .zone-topper-wrapper{
    grid-row:1/3;
    }
    .section-main{
     grid-column:2/3;
     background-color:orange;
    }
    .section-footer{
      grid-column: 2/3;
      background-color:yellow;
    }
    .zone-branding-wrapper{
      grid-column:2/3;
    }
    
    .zone-menu{
    width:29%;
    display:inline-block;
    }
    

    https://codepen.io/ak472526/pen/dvLaGX

    【讨论】:

    • 这会产生与 OP 在他们的问题中相同的结果。
    • 分别检查 HTML 和 CSS 的变化。检查此代码笔codepen.io/ak472526/pen/dvLaGX
    • 每个元素都在自己的行上,不会复制 OP 提供的图表。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2022-11-19
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多