A’la colspan

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tabele flexbox</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="kontener">
        <div id="szer">1 i 2</div>
        <div id="waskie1">3</div>
        <div id="waskie2">4</div>
    </div>
</body>
</html>

style.css

.kontener {
    display: flex; /* oznaczenie kontenera jako element flex */
    flex-direction: row; /* ustawienie w rzędzie (poziomo) */
    flex-wrap: wrap; /* zwijanie bloków */
    height: 500px;
    width: 500px;
    margin: 0 auto; /* centrowanie bloku */
    justify-content: center;
    line-height: 250px; /* tekst na środku (wysokość) */
}
body {
    text-align: center;
}
#szer {
    flex-basis: 100%; /* cała szerokość dla szerokiego bloku */
    background-color: coral;
}
#waskie1, #waskie2 {
    flex-basis: 50%; /* po połowie miejsca na mniejsze bloki */
}
#waskie1 {
    background-color: honeydew;
}
#waskie2 {
    background-color: burlywood;
}

Wynik

A’la rowspan

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tabele flexbox</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="kontener">
        <div id="wysokie">1 i 2</div>
        <div id="niskie1">3</div>
        <div id="niskie2">4</div>
    </div>
</body>
</html>

style.css

.kontener {
    display: flex; /* oznaczenie kontenera jako element flex */
    flex-direction: column; /* ustawienie w kolumnie (pionowo) */
    flex-wrap: wrap; /* zwijanie bloków */
    height: 500px;
    width: 500px;
    margin: 0 auto; /* centrowanie bloku */
    justify-content: center;
}
body {
    text-align: center;
}
#wysokie {
    flex-basis: 100%; /* cała wysokość dla wysokiego bloku */
    background-color: coral;
    line-height: 500px; /* tekst na środku (wysokość) */
}
#niskie1, #niskie2 {
    flex-basis: 50%; /* po połowie miejsca na mniejsze bloki */
    line-height: 250px; /* tekst na środku (wysokość) */
}
#niskie1 {
    background-color: honeydew;
}
#niskie2 {
    background-color: burlywood;
}

Wynik