• Как организовать файлы в библиотеке компонентов?

    qfox
    @qfox
    Ответы есть у меня
    У нас есть блок "Кнопка", у нее есть дочерний элемент "Кнопка__иконка" и модификатор "Кнопка--Иконка-Слева"(уменьшает отступ слева, чтоб иконка смотрелась лучше).
    У этой кнопки есть три модификатора размера (sm,m,l). У каждого размера будет разный отступ слева при модификаторе "Кнопка--Иконка-Слева".


    Легко решается через CSS Custom Properties и типографские константы
    --sm, --m, --l при этом выставляют эти константы, а другие модификаторы и элементы их используют в нужных им местах.

    Добавим изменение размера "Кнопка__иконка" для разных размеров кнопки (если это иконочный шрифт можно использовать font-size всей кнопки, но мы как современные используем svg иконки и размер нужно задавать вручную).


    Лучше делать враппер над иконкой, чтобы не завязываться на svg или нет.
    Если библиотека компонент общая — ситуации могут быть разные.
    Такая структура более менее:
    <Button>
      <Button__icon><Icon ... /></Button__icon>
      <Button__body>Текст на кнопке</Button__body>
    </Button>


    Если иконка есть — выводим `Button__icon`, если нет — не выводим. Стили вешаем на `Button__icon`.

    Для кастомизации — оставляем `Button__body`, потом пригодится в кастомных `Select`.

    В идеале нужна структура, чтоб видеть все связи (пример выше), для быстрого доступа к нужному свойству, но также инструмент, который умеет удалять не нужные стили по связям. Удалив элемент "Кнопка__иконка" в сборку не должны попасть модификаторы "Кнопка--Иконка-Слева" разных размеров.

    Может кто то встречался с решением или рекомендациями по данному вопросу.


    Звучит как сборка стилей по зависимостям из bemjson/jsx. Технически, есть возможность даже из html получить bemjson и инициировать для него сборку css/js.
    Процесс будет выглядеть примерно так:
    const fs = require('fs');
    const miss = require('mississippi');
    const html2bemjson = require('html2bemjson');
    const bemjsonToDecl = require('bemjson-to-decl');
    const src = require('gulp-bem-src');
    const gconcat = require('gulp-concat');
    const vfs = require('vinyl-fs');
    
    src(
        ['path/to/blocks'],
        bemjsonToDecl.convert(
            html2bemjson(
                String(fs.readFileSync('path/to/your.html')))),
        'css',
        { // дополнительные настройки
            skipResolvingDependencies: false, // отключаем зависимости
            {
                'path/to/blocks': { scheme: 'nested' } // у 'path/to/blocks' схема nested 
            }
        }
    ).pipe(gconcat('path/to/your.css')).pipe(vfs.dest('.'))

    Ну и всё
    Ответ написан
    3 комментария
  • Как вы указываете авторство сайта?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Автора можно указать. Можно еще добавить генератор.

    <meta name="author" content="">
    <meta name="generator" content="Создание сайта - студия «Рога и копыта»" />

    Но Копирайт, Рипли-ту и Контакт точно должны быть заказчика.
    А не разработчика.
    Ответ написан
    Комментировать
  • Есть ли встроенный respond.js в modernize.js?

    Kublyakov
    @Kublyakov
    www.initializr.com - я тут такое видел. Выбираете modernizr и отмечаете чекбокс response. Получите "modernizr-2.8.3-respond-1.4.2.min.js"
    Ответ написан
    Комментировать
  • Как сделать квадратный, резиновый div?

    @bogdan0083
    Комментировать