shape-outside
- это то, что вам нужно.
Вот основная c идея для верхней части, которую вы можете легко воспроизвести для нижней:
body {
width:780px;
}
.top {
height:150px;
text-align:justify;
}
i {
display:inline-block;
width:30px;
height:30px;
margin:2px;
background:red;
border-radius:50%;
}
.top::before {
content:"";
height:100%;
width:150px;
float:left;
shape-outside:linear-gradient(to bottom left,transparent 49%,#fff 50%);
}
.top span::before {
content:"";
height:100%;
width:150px;
float:right;
shape-outside:linear-gradient(to bottom right,transparent 49%,#fff 50%);
}
.left,
.right{
width:150px;
height:150px;
float:left;
transform:translateY(-90%);
clip-path:polygon(0 0,100vh 100vh,0 100vh );
}
.left::before,
.right::before{
content:"";
height:100%;
width:100%;
float:right;
shape-outside:linear-gradient(to bottom left,#fff 49%,transparent 50%);
}
.right {
float:right;
text-align:right;
clip-path:polygon(-100vh 100vh,100vh 100vh,100% 0);
}
.right::before{
float:left;
shape-outside:linear-gradient(to bottom right,#fff 49%,transparent 50%);
}
i:hover{
background:blue;
}
<div class="top"><span></span>
<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
</div>
<div class="left">
<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
</div>
<div class="right">
<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
</div>
Обновление
Полный пример формы стадиона:
var t = document.querySelector('.top');
var tl = document.querySelector('.top-left');
var tr = document.querySelector('.top-right');
var b = document.querySelector('.bottom');
var bl = document.querySelector('.bottom-left');
var br = document.querySelector('.bottom-right');
var sl = document.querySelector('.side-left');
var sr = document.querySelector('.side-right');
for (var i = 0; i < 5000; i++) {
var l = document.createElement("i");
t.appendChild(l);
l = document.createElement("i");
tl.appendChild(l);
l = document.createElement("i");
tr.appendChild(l);
l = document.createElement("i");
b.appendChild(l);
l = document.createElement("i");
bl.appendChild(l);
l = document.createElement("i");
br.appendChild(l);
l = document.createElement("i");
sl.appendChild(l);
l = document.createElement("i");
sr.appendChild(l);
}
body {
margin: 0;
}
.stadium {
display: grid;
min-width:600px;
min-height:500px;
grid-template-columns: 20% 1fr 20%;
grid-template-rows: 150px 1fr 150px;
row-gap:10px;
height: 100vh;
line-height: 0;
}
.top,
.bottom{
height: 100%;
grid-column: 1/-1;
grid-row: 1;
text-align: justify;
overflow: hidden;
}
.bottom {
grid-row: 3;
}
.top::before,
.bottom::before{
content: "";
height: 100%;
width: 20%;
float: left;
shape-outside: linear-gradient(to bottom left, transparent 49%, #fff 50%);
}
.bottom::before{
shape-outside: linear-gradient(to top left, transparent 49%, #fff 50%);
}
.top span::before,
.bottom span::before {
content: "";
height: 100%;
width: 20%;
float: right;
shape-outside: linear-gradient(to bottom right, transparent 49%, #fff 50%);
}
.bottom span::before {
shape-outside: linear-gradient(to top right, transparent 49%, #fff 50%);
}
.top-left,
.top-right,
.bottom-left,
.bottom-right{
width: 100%;
height: 100%;
float: left;
grid-row: 1;
grid-column: 1;
overflow: hidden;
clip-path: polygon(0 0, 100% 100%, 0 100%);
}
.bottom-left {
grid-row: 3;
grid-column: 1;
clip-path: polygon(0 0, 100% 0,0 100%);
}
.top-left::before,
.top-right::before,
.bottom-left::before,
.bottom-right::before{
content: "";
height: 100%;
width: 100%;
float: right;
shape-outside: linear-gradient(to bottom left, #fff 49%, transparent 50%);
}
.bottom-left::before {
shape-outside: linear-gradient(to top left, #fff 49%, transparent 50%);
}
.top-right,
.bottom-right{
float: right;
text-align: right;
grid-column: 3;
clip-path: polygon(0 100%, 100% 100%, 100% 0);
}
.bottom-right {
grid-row: 3;
clip-path: polygon(0 0, 100% 0,100% 100%);
}
.top-right::before {
float: left;
shape-outside: linear-gradient(to bottom right, #fff 49%, transparent 50%);
}
.bottom-right::before {
float: left;
shape-outside: linear-gradient(to top right, #fff 49%, transparent 50%);
}
.side-right,
.side-left {
height:100%;
overflow:hidden;
}
.side-right {
grid-column:3;
text-align:right;
}
i {
display: inline-block;
vertical-align: top;
width: 8px;
height: 8px;
margin: 1px;
background: red;
border-radius: 50%;
}
i:hover {
background: blue;
}
<div class="stadium">
<div class="top-left"></div>
<div class="top"><span></span></div>
<div class="top-right"></div>
<div class="bottom-left"></div>
<div class="bottom"><span></span></div>
<div class="bottom-right"></div>
<div class="side-left"></div>
<div class="side-right"></div>
</div>