html - Different height of CSS grid cells -
this question has answer here:
how can move "content" , "right" block responsive? problem can't use sub nested grid. don't need hacks: no margin-top because header can different height. no javascript. pure css. if @ possible.
now markup looks this:
.wrapper { border: 1px solid red; display: grid; grid-template-columns: 1fr 2fr 1fr; grid-template-areas: "aside header header" "left content right"; grid-gap: 15px; } .header, .aside, .left, .content, .right { border: 1px solid black; padding: 10px; } .header { grid-area: header; height: 30px; /* in real case it's responsive height */ } .aside { grid-area: aside; height: 80px; /* in real case it's responsive height */ } .left { grid-area: left; } .content { grid-area: content; background: yellow; } .right { grid-area: right; background: yellow; } .left, .content, .right { height: 100px; /* in real case it's responsive height */ } <div class="wrapper"> <!-- order should on mobile --> <header class="header">header</header> <aside class="aside">aside</aside> <div class="left">left</div> <div class="content">content</div> <div class="right">right</div> </div>
a solution (using css only) adding row grid-template-areas:
.wrapper { border: 1px solid red; display: grid; grid-template-columns: 1fr 2fr 1fr; grid-template-areas: "aside header header" "aside content right" "left content right"; grid-gap: 15px; } .header, .aside, .left, .content, .right { border: 1px solid black; padding: 10px; } .header { grid-area: header; height:30px; /* in real case it's responsive height */ } .aside { grid-area: aside; height: 80px; /* in real case it's responsive height */ } .left { grid-area: left; } .content { grid-area: content; background: yellow; } .right { grid-area: right; background: yellow; } .left, .content, .right { height: 100px; /* in real case it's responsive height */ } <div class="wrapper"> <!-- order should on mobile --> <header class="header">header</header> <aside class="aside">aside</aside> <div class="left">left</div> <div class="content">content</div> <div class="right">right</div> </div> 
Comments
Post a Comment