<div class="block">
    <div class="block__inner">
        <p class="block__text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Inventore veritatis iure tenetur sapiente, voluptatum repudiandae reprehenderit incidunt, cumque accusantium perspiciatis rem officia obcaecati illo id ducimus quas dolorem et debitis?</p>
    </div>
</div>
<div class="block">
    <div class="block__inner">
        <p class="block__text">Sapiente voluptate eum ipsum tempora nostrum, nobis accusantium nesciunt esse vitae dolor! Explicabo minus alias autem provident modi debitis cumque exercitationem, architecto, eum labore atque amet, omnis fugiat delectus. Sint!</p>
    </div>
</div>
<div class="block">
    <div class="block__inner">
        <p class="block__text">Quae pariatur doloremque labore aliquam at est animi eius placeat, sed vero perspiciatis alias! Ad a eveniet iusto excepturi provident odit molestias deserunt culpa, magnam laboriosam sit ea doloribus magni!</p>
    </div>
</div>
body {
    min-height: 100vh;
    margin: 0;
    gap: 32px;
    padding: 64px;
    box-sizing: border-box;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    font: 16px 'Segoe UI', Arial, Helvetica, sans-serif;
}

.block {
    --gap: 2px;
    --padding: 20px;
    --divider: 1.8;
    --header-marker-width: 120px;
    --header-marker-height: 20px;
    --header-marker-skew: 20px;

    line-height: 1.5;
    background-color: #222222;
    color: #ffffff;
    clip-path: polygon(
        0% 0%,
        var(--header-marker-width) 0%,
        calc(var(--header-marker-width) + var(--header-marker-skew)) var(--header-marker-height),
        100% var(--header-marker-height),
        100% 100%,
        0% 100%
    );
}

.block__inner {
    width: 100%;
    height: 100%;
    padding: calc(var(--header-marker-height) + var(--padding) + var(--gap)) calc( var(--padding) + var(--gap)) calc( var(--padding) + var(--gap)) calc( var(--padding) + var(--gap));
    box-sizing: border-box;
    background-color: rgba(255, 255, 255, 0.1);
    clip-path: polygon(
        calc(0% + var(--gap)) calc(0% + var(--gap)),
        calc(var(--header-marker-width) - var(--gap) / var(--divider)) calc(0% + var(--gap)),
        calc(var(--header-marker-width) + var(--header-marker-skew) - var(--gap) / var(--divider)) calc(var(--header-marker-height) + var(--gap)),
        calc(100% - var(--gap)) calc(var(--header-marker-height) + var(--gap)),
        calc(100% - var(--gap)) calc(100% - var(--gap)),
        calc(0% + var(--gap)) calc(100% - var(--gap))
    );
}

.block__text {
    margin: 0;
}
const blocks = document.querySelectorAll('.block');

const update = (property) => (value) => blocks.forEach((block) => {
    const unit = property === '--divider' ? value : CSS.px(value);
    block.style.setProperty(property, unit);
});

const gui = new dat.GUI();

const params = {
    gap: 2,
    padding: 20,
    divider: 1.8,
    markerWidth: 120,
    markerHeight: 20,
    markerSkew: 20
};

const border = gui.addFolder('Border');
border
    .add(params, 'gap', 0, 20, 1)
    .onChange(update('--gap'));
border
    .add(params, 'padding', 0, 100, 1)
    .onChange(update('--padding'));
border
    .add(params, 'divider', 1, Math.PI)
    .onChange(update('--divider'));
border.open();

const marker = gui.addFolder('Marker');
marker
    .add(params, 'markerWidth', 0, 320, 1)
    .onChange(update('--header-marker-width'));
marker
    .add(params, 'markerHeight', 0, 100, 1)
    .onChange(update('--header-marker-height'));
marker
    .add(params, 'markerSkew', 0, 60, 1)
    .onChange(update('--header-marker-skew'));
marker.open();

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.9/dat.gui.min.js