'Is this layout possible with CSS only? [closed]

Can anyone think of a way to do this with CSS only? The only way I can think would be to use subgrid but browser support is not good enough for that yet.

I'd like to keep the large text all wrapped in an <h1> tag if possible, which is proving difficult.

I think I'll have to use javascript to calculate the width of the last word of the title and use that to offset the paragraph.

Main title could be 2 or 3 lines, and paragraph could also be up to 3 lines.

My current HTML is below, but can easily change it.

Thanks

<div class="home-hero-banner-slide-title">
  <h1>
    <span>Line 1</span>
    <span>Line 2</span>
    <span>Line 3</span>
  </h1>
  <p class="home-hero-banner-slide-paragraph">paragraph here</p>
</div>

enter image description here



Solution 1:[1]

Have a look at this fiddle, might help since you are only relying on CSS https://jsfiddle.net/L670c1sg/

.atul {
  display: grid;
  grid-template-columns: repeat(400, .25%);
  grid-auto-rows: 50px; /* for demo only */
  grid-row-gap: 30px;   /* note that you need to create column gaps through
                           the proper distribution of columns, because if you
                           use `grid-column-gap`, it will add a gap between
                           all 400 columns */
}

.card:nth-child(1) {
  grid-column: 1 / 180;
  grid-row: 1 / 3;
}

.card:nth-child(2) {
  grid-column: -1 / -210; /* starting at the end line of the grid
                             (works only in explicit grids) */
  grid-row: 1 / 2;
}

.card:nth-child(3) {
  grid-column: -1 / -210;
  grid-row: 2 / 3;
}

/* starting at the 4th item, target even items only */
.card:nth-child(n + 4):nth-child(even) {
  grid-column: 1 / 195;
}

.card:nth-child(n + 4):nth-child(odd) {
  grid-column: -1 / -195;
}

.card:nth-child(4),
.card:nth-child(5) {
  grid-row: 3;
}

.card:nth-child(6),
.card:nth-child(7) {
  grid-row: 4;
}

.card:nth-child(8),
.card:nth-child(9) {
  grid-row: 5;
}

.card:nth-child(10),
.card:nth-child(11) {
  grid-row: 6;
}

.card:nth-child(12),
.card:nth-child(13) {
  grid-row: 7;
}
<div class="atul">
  <div class="card" style="background-color: red;">Card 1</div>
  <div class="card" style="background-color: green;">Card 2</div>
  <div class="card" style="background-color: yellow;">Card 3</div>
  <div class="card" style="background-color: skyblue;">Card 4</div>
  <div class="card" style="background-color: skyblue;">Card 5</div>
  <div class="card" style="background-color: skyblue;">Card 6</div>
  <div class="card" style="background-color: skyblue;">Card 7</div>
  <div class="card" style="background-color: skyblue;">Card 8</div>
  <div class="card" style="background-color: skyblue;">Card 9</div>
  <div class="card" style="background-color: skyblue;">Card 10</div>
  <div class="card" style="background-color: skyblue;">Card 11</div>
  <div class="card" style="background-color: skyblue;">Card 12</div>
  <div class="card" style="background-color: skyblue;">Card 13</div>
</div>

Solution 2:[2]

Once with grid, once with flex, and a version without flex or grid.

span {
  z-index: 1;
  position: absolute;
  color: hotpink;
  width: 100%;
  text-align: center;
}

.home-hero-banner-slide-title {
  width: 100%;
  display: flex;
  flex-direction: column;
}

img {
  max-width: 100%;
  width: 100%;
  border-radius: 5px;
}

h1 {
  margin-top: 5em;
}

.container {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: auto;
}

h1:first-child {
  margin-top: 0;
}

body {
  margin: 0;
}

.home-hero-banner-slide-title > div,
.wrapper > div,
.container > div {
  display: inherit;
}
<h1>W/ Flex</h1>

<div class="home-hero-banner-slide-title">
  <div>
    <span>Line 1</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 2</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 3</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <p class="home-hero-banner-slide-paragraph">paragraph here</p>
</div>

<h1>W/O anything</h1>

<div class="wrapper">
  <div>
    <span>Line 1</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 2</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 3</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
</div>

<h1>W/ Grid</h1>

<div class="container">
  <div>
    <span>Line 1</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 2</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
  <div>
    <span>Line 3</span>
    <img src="https://dummyimage.com/900x300/000/fff">
  </div>
</div>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kameron
Solution 2