Редактор CSS на CSS

Никита Дубко, HR Tech Яндекса

Редактор CSS на CSS

Никита Дубко, HR Tech Яндекса

Никита Дубко

Веб-стандарты

CodePen

Утехзадание

Только HTML и CSS!

<css-demo>
    <div class="panels">
        <style>
            /* TODO */
        </style>

        <div class="demo">
            TODO
        </div>
    </div>
</css-demo>
css-demo {
    --height: 100vh;
    height: var(--height);
    display: block;
}
some-new-element {
    display: inline;
}
.panels {
    display: grid;
    height: var(--height);
    grid-template-columns: 1fr 1fr;
    border: 3px solid #777;
}
.demo {
    display: grid;
    place-items: center;
    border-left: 3px solid #777;
}
style {
    display: block;
    font-family: monospace;
    white-space: pre;
    overflow: scroll;
    height: 100%;
}
style {
    display: block; /* 😱 */
}
script {
    display: block; /* 🫣 */
}
style {
    display: block;
    font-family: monospace;
    white-space: pre;
    overflow: scroll;
    height: 100%;
}
Modern Font Stacks
style {
    display: block;
    font-family: 'Nimbus Mono PS', 'Courier New', monospace;
    white-space: pre;
    overflow: scroll;
    height: 100%;
}
css-demo {
    .panels {
        > style { }
        > .demo { }
    }
}
CSS Inheritance

Some CSS later...

Demo: Start

contenteditable

contenteditable

contenteditable

Demo: Editable

spellcheck

spellcheck

spellcheck=false

Demo: Spellcheck

Тёмная тема!

@media (prefers-color-scheme: dark) {
    html {
        color-scheme: dark;
    }
}
Demo: Dark Theme

Утехзадание

Адаптив 🪗

css-demo {
    container: css-demo-container / size;

    @container css-demo-container (width < 800px) {
        & {
            grid-template-columns: 1fr;
            grid-template-rows: 1fr 1fr;
        }
    }
}
CSS container queries

@scope

@scope
Алло, мы с нижнего этажа, у вас стили протекают
Demo: Isolate

Утехзадание

resize

resize
.panels {
    grid-template-columns: auto 1fr;

    >style {
        resize: horizontal;
        width: 50cqi;
    }
}
Demo: Resize

codepen.io/jh3y

Утехзадание

А если JavaScript?

Custom Highlight API

Syntax Highlighting code snippets with Prism and the Custom Highlight API
CSS.highlights.set(
    'important',
    new Highlight()
)
::highlight(important) {
    color: #e90;
}
Demo: Highlight

Всем добра!

Слайды
mefody.dev/talks/css-editor/

Подписаться
@dark_mefody
t.me/mefody_dev QR-код со ссылкой на слайды