2017-08-05 91 views
2

我尝试创建一个两列布局[PARAMS - 渲染]使用CSS网格布局行的未定义数量(有时2,有时3)。CSS网格布局2 * 3与多组

渲染柱具有特定背景无论对行的计​​数,但行的高度是列之间相等。我想我需要把另一个标签做到这一点。

我让你这个布局的屏幕截图。这是我能给的更好的例子。粉红色的盒子是网格布局。对于“渲染”列,我有一个可以在CSS中创建的特定背景(白色和阴影)。我不想使用它的照片。

CSS grid layout picture

CSS grid layout picture 2

这似乎是我想要做的就是这样的例子隐式命名网格线https://gridbyexample.com/examples/example22/

+0

您可以为您的要求使用'felxbox'。 – Abinthaha

+0

行高会等于内容还是不等?列的宽度会是什么?你需要支持IE/Edge还是不支持? –

+0

行与内容不相等且自动。 列的宽度将接近20%(params)/ 80%(渲染)。 我不需要支持IE,但如果可能的话,Edge会很棒。 –

回答

1

不要指定行的高度,因为他们将被默认创建与自动高度。添加具有背景的绝对定位伪元素以将背景添加到右列并保留元素自动布局。

.grid { 
 
    box-sizing: border-box; 
 
    display: grid; 
 
    
 
    /* get 20% and remaining width for columns */ 
 
    grid-template-columns: 20% 1fr; 
 
    
 
    /* gap between rows and columns */ 
 
    grid-gap: 15px; 
 
    
 
    /* just styles for demo */ 
 
    color: #ada0b9; 
 
    padding: 40px; 
 
    
 
    position: relative; 
 
} 
 

 
.grid__item { 
 
    padding: 30px; 
 
} 
 

 
.grid__item--params { 
 
    background-color: #e8d7eb; 
 
} 
 

 
.grid__item--render { 
 
    background-color: #f8e7fb; 
 
} 
 

 
.grid:after { 
 
    content: ""; 
 
    position: absolute; 
 
    
 
    /* also add padding to positioning values */ 
 
    left: calc(20% + 40px); 
 
    right: 40px; 
 
    bottom: 40px; 
 
    top: 40px; 
 
    
 
    /* add negative to prevent content overlapping */ 
 
    z-index: -1; 
 
    
 
    /* add needed background styles here */ 
 
    background: lime none; 
 
    box-shadow: 0 8px 20px rgba(0,0,0,.1); 
 
}
<div class="grid"> 
 
    <div class="grid__item grid__item--params">Params#1</div> 
 
    <div class="grid__item grid__item--render">Render#1</div> 
 
    <div class="grid__item grid__item--params">Params#2</div> 
 
    <div class="grid__item grid__item--render">Render#2</div> 
 
    <div class="grid__item grid__item--params">Params#3</div> 
 
    <div class="grid__item grid__item--render">Render#3</div> 
 
</div>

+0

谢谢您的回答。我遇到的问题是只有一个呈现整个呈现列,无论行。这就是为什么我认为我可以在.grid__item之前添加另一个div元素 - 渲染元素来模拟这个“组”。 –

+0

@BenoitHenry对不起,我不明白你的要求。你能提供一些小提琴(例如jsFiddle)吗? –

+0

我用第二个例子编辑了我的帖子。希望它能帮助你。 您的HTML结构是确定的。我只是觉得我需要添加一个新的div.grid__item - renderbackground来为整个“渲染”列添加空白和阴影背景。 –

1

我终于找到了一种方法,但我真的不跟我的代码。 我不得不在网格的每个元素上添加计数器修饰符,以将其放在正确的空间上。

HTML:

<main class="render render--2 container"> 
    <div class="render__view--bg"></div> 

    <div class="render__params render__params--1"> 
     <span class="font-name">Maven Pro</span> 
    </div> 

    <div class="render__view render__view--1"> 
     <h1>Lorem ipsum dolor sit amet consectetur adipiscing elit.</h1> </div> 


    <div class="render__params render__params--2"> 
     <span class="font-name">Quintessential</span> 
    </div> 

    <div class="render__view render__view--2"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce egestas vestibulum mauris, id accumsan dolor. Fusce interdum sit amet purus et imperdiet. Nulla porta tortor ante, a cursus nisi varius vitae. Maecenas eu faucibus velit. Sed varius nulla ac facilisis tempus. Vestibulum aliquet varius consequat. Nullam augue dui, auctor non vehicula quis, eleifend et ex. Curabitur sit amet purus rutrum, rhoncus est non, ornare ex. Aenean lobortis nibh ut ante vestibulum ornare. Maecenas posuere odio nec mollis consectetur. Quisque non leo nec quam congue commodo eu non est.</p> 

<p>In sit amet nisi urna. Integer vehicula massa quis risus tristique, eu condimentum metus fringilla. Nunc ex ipsum, suscipit eget ullamcorper ut, faucibus non risus. Fusce consectetur risus nec tellus malesuada posuere. Curabitur quam libero, efficitur at malesuada a, venenatis in lectus. Ut aliquam auctor ullamcorper. In pretium, elit vel mollis ultrices, sem leo dignissim turpis, in blandit nunc dui et leo.</p> 

<p>Suspendisse potenti. Sed sit amet velit id nunc placerat aliquet et in quam. Praesent eu laoreet felis. Nulla non nibh libero. Nulla in tellus ac mauris lacinia vulputate ac vitae mi. Pellentesque eleifend non massa id pellentesque. Nam fermentum, ante eget consectetur sodales, dui augue faucibus justo, eu posuere est sapien eu sapien.</p> </div> 

</main> 

和CSS:

//CSS Grid 
.render{ 
    display: grid; 
    grid-gap: 10px; 
    grid-template-columns: 20% 80%; 

    &.render--2{ 
     grid-template-rows: auto auto; 
     grid-template-areas: 
    "params view" 
    "params view"; 
    } 

    &.render--3{ 
     grid-template-rows: auto auto auto; 
     grid-template-areas: 
    "params view" 
    "params view" 
    "params view"; 
    } 

    .render__view--bg{ 
     z-index: 1; 
     grid-column: view-start/view-end; 
    grid-row: view 1/view 3; 
     background: #fff none; 
     box-shadow: 0 8px 20px rgba(0,0,0,.1); 
    } 

    .render__params, 
    .render__view{ 
     padding: 16px; 
     z-index: 2; 
    } 

    .render__params{ 
     grid-column: params/span 1; 

    &--1{ 
      grid-row: params 1; 
    } 

    &--2{ 
      grid-row: params 2; 
    } 

    &--3{ 
      grid-row: params 3; 
    } 
    } 

    .render__view{ 
     grid-column: view/span 1; 

     &--1{ 
      grid-row: view 1; 
    } 

    &--2{ 
      grid-row: view 2; 
    } 

    &--3{ 
      grid-row: view 3; 
    } 
    } 
} 

这里的Codepen preview

谢谢大家的帮助!