• Как снизить зависимость от разработчиков?

    tundramani
    @tundramani
    секрет простой - разработкой должны заниматься только разработчики
    а не эффективные манагеры которые не умеют разрабатывать

    должен быть главный разраб который отвечает за качество
    он контролирует работу разрабов и нанимает их на работу

    если так не делать то будет то что как обычно есть в наших краях - отвратительный продукт

    аналогично и в работе нашего государства - разработкой занимаются некомпетентные люди
    Ответ написан
    Комментировать
  • Верстка с нуля: какие основные этапы работы?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Использую vscode+webpack+pug+scss+бэм. Из физических инструментов, основной моник: lg ultrawide 29um69g, рядом прикручен моник от ноутбука повешенный вертикально, подключенный через универсальный скаллер.

    0) Запускаю Spotify :-)

    1) Произвожу установку всех необходимых модулей для сборки. В моем случае у меня набор конфигураций для webpack (отдельные файлы для pug, scss, static и.т.д., выбираю что нужно).

    2) Запускаю avocode, загружаю в него макет. Определяю в нем переменные (в то же время записываю их, чтобы сразу кинуть в scss файл) для цветов, размеров шрифтов и.т.д. чтобы при получении кусочков кода из него, он сразу расставлял переменные.

    3) Запускаю VS Code, открываю нужную папку.

    4) Пишу размету на Pug. Пишу с БЭМ, если встречаю повторяющийся блок, то открываю файл _mixins.pug, в который пишу миксины для повторяющихся блоков, например товаров, пунктов меню, каких-то блоков и.т.д. Pug умеет делать циклы, это ускоряет сильно.

    5) Когда HTML готов, начинаю делать каркас. Если дизайн сделан по сетке, определяю контейнеры, колонки, строки в свои классы (не пишу в html тучи классов аля col-md-6, а пишу в SCSS инклуды в нужные мне блоки, типа @include make-col(2) и.т.д.).

    6) Экспортирую картинки из Avocode. Очень делается просто, указываю папку и просто кликаю экспорт и ввожу название файла и расширения. Преимущественно для иконок использую svg, если нет svg, то ищу эту иконку в интернете (дизайнеры редко рисуют иконки сами, но зато любят вставлять их не в векторе). Если иконка простая, могу сам ее в inkscape обвести, ну и если нет, то экспортирую png в размере (благо авокод это позволяет, если конечно дизайнер не вставил в исходном маленьком размере). Когда есть контакт с дизайнером, трясу его, ибо растр это плохо для иконок.

    7) Пишу стили блоков из страницы. На этом этапе можно на втором монике параллельно смотреть футураму или
    Арчера :-) Но чаще на широком монике слева браузер, справа VS Code, а на втором монике Avocode (может меняться местами с браузером). Мысленно нарезаю страницу на блоки. Для каждого блока (БЭМ) создаю отдельный scss файл (кто-то даже для элемента создает, но мне лень), из него сразу выписываю все селекторы. Иногда могу сначала выписать все селекторы со страницы (но так лучше не делать, т.к. во время работы может потребоваться изменить что-то в разметке), но чаще для одного блока выполняю этот пункт и за ним сразу выполняю пункт 8, потом для нового блока опять 7 и 8 и.т.д.

    8) Пишу css код вместе с Avocode, у него беру нужные мне параметры (а он уже подставил в них переменные), и вставляю в мой код. И параллельно сверяю со скрином макета используя вот это расширение https://chrome.google.com/webstore/detail/perfectp...

    9) Пишу адаптив. Я не могу привыкнуть к методологии mobile-first, поэтому пишу всегда сначала полную версию сайта. Я понимаю, что это чревато всякими проблемами и это типа не модно, но мне норм.

    10) Медиа-запросы пишу прямо в блоках, для каждого блока/элемента/модификатора может быть отдельный медиа-запрос. Но для начала определяю breakpoint'ы для разных экранов (чтобы их не было сотни разных), если использую Bootstrap, то беру его breakpoint'ы.

    11) Добавляю анимашки. Даже если заказчик не просил отдельно (и если не указал отдельно, что нельзя), он все равно будет доволен, а с animate.css+onscreen.js это вообще работа 10 минут. Сложные анимации обговариваю отдельно, чтобы не сделать ненужную работу.

    11) Все снова сверяю, пишу скрипты где надо. Для слайдеров в 99% случаев подходит slick (с доработками конечно, но там хорошее API), для других случаев могу написать свой.

    12) Сдаю заказчику и жду ответа сидя на тостере/пикабу.

    Это чисто мой опыт, опыт фрилансера, не знаю, как делают другие и не могу на 100% утверждать что это 100% правильный способ. Я так и не смог заставить свой конфиг webpack правильно вставлять спрайты svg.
    Надеюсь чем-то поможет мой ответ.
    Ответ написан
    7 комментариев
  • Составили требований для верстальщика, не перегнули ли палку?

    sim3x
    @sim3x
    1.1. Структура директорий
    mkdir -p  html/{css/fonts,scss/util,js/vendor,i/icons}
    tree html
    spoiler
    html
    ├── css
    │   └── fonts
    ├── i
    │   └── icons
    ├── js
    │   └── vendor
    └── scss
        └── util
    .

    1.2.1. Breakpoints
    Достаточно сказать, что все переменные храним в отдельном файле

    20 Для ID - camelCase. ID нам нужен для JS
    Неправильно. Нужно использовать классы. Если требуется отделить классы для стайлинга и для жс - делаем префикс

    23 Используем Автопрефиксер, он расставит префиксы за нас. Используем автоматизацию — ставим его как пакет и подключаем в процесс обработки стилей. Не используем автоматизацию — есть он-лайн вариант
    Делаете верстку с флексом = не используете старые браузеры = не требуются префиксы = не требуется аутопрефиксер
    Не делать автоматизацию - такого пункта даже в теории быть не может

    2. Используемые решения
    Смешивать общий гайд и стайлгайд - не нужно
    Стайлгайд вообще нужно готовить отдельно для каждого проекта

    Про бем уже все сказали
    Ответ написан
    18 комментариев
  • Что имеет смысл осваивать если есть желание уйти в "айтишники"?

    @jaxel
    Если вы планируете быстро срубить бабла, вам точно не сюда. 100+ платят людям с навыками выше среднего. И это как минимум 5 летний опыт коммерческой разработки, и больше 10 лет опыта в целом. Это прям самый-самый минимум. А с нулевым опытом сейчас серьёзная конкуренция.

    По моим ощущением расклад по ЗП/востребованности примерно такой:

    Junior и ЗП 30к+ - претендуют 10-20 человек на место.
    Middle и ЗП 100к+ - 2 места на человека
    Senior и ЗП 200к+ - 10 мест на одного человека
    Ответ написан
    Комментировать
  • Как не стать тупым в общении, профессионально занимаясь программированием?

    BBmike
    @BBmike
    Автор, иди продавцом на рынок или кассиром в макдак. Там одни экстраверты.
    остальные профессии в основном как раз про то, как человек сидит и делает свою работу.
    Ответ написан
    Комментировать
  • Стоит ли переходить на React.PureComponent по-умолчанию?

    PQR
    @PQR
    React.PureComponent реализует метод shouldComponentUpdate таким образом, что он делает поверхностное сравнение props и state (не глубокое). Вот собственно код:
    https://github.com/facebook/react/blob/c8fbdac2271...
    shouldUpdate =
                !shallowEqual(prevProps, nextProps) ||
                !shallowEqual(inst.state, nextState);


    Что такое shallowEqual? Это по сути сравнение оператором === каждого элемента из prevProps с каждым элементом из nextProps. На всякий случай дам ссылку на реализацию для полного понимания: https://github.com/facebook/react/blob/6963ea4bfcd...

    В итоге всё зависит от структуры ваших props. Если в props вы передаёте объекты которые иногда мутируются, т.е. по ссылке они равны ===, но внутри какие-то данные поменялись (что само по себе выглядит странно в экосистеме redux + reselect, но вполне возможно технически), тогда использование PureComponent вам всё поломает, т.к. на экране какие-то компоненты перестанут перересовываться!

    Если же у вас всё по уму, данные которые передаются через props являются скалярными типами (string, int, float, bool) или immutable объектами, тогда смело используйте PureComponent - в некоторых случаях он поможет избавиться от лишних вызовов render.

    Важное замечание: PureComponent нужно использовать только для так называемых presentational components, т.е. для тех компонент, которые НЕ обёрнуты в вызов redux connect().

    Для container components (т.е. тех компонент, которые обёрнуты в redux connect()) нет смысла наследоваться от PureComponent, т.к. метод connect() оборачивает ваш компонент своей реализацией shouldComponentUpdate, которая также использует shallowEqual. Если вы по недосмотру унаследуете container component от PureComponent - ошибок не будет, но это не имеет никакого смыла, т.к. ваш код по сути будет дважды делать shallowEqual, а зачем делать лишнюю работу?

    Подводя итог, рецепт такой:
    - presentational components наследуем от React.PureComponent
    - container components (которые обёрнуты в redux connect()) наследуем от старого доброго React.Component
    Ответ написан
    1 комментарий
  • Как взять токен из адресной строки (oauth)?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Вы должны сохранить полученный маркер доступа (access token). В случае с JavaScript это можно сделать в sessionStorage (в рамках текущей сессии) или localStorage (сохранить на длительный срок), либо передать на сервер (более надежный вариант).

    Код сохранения маркера доступа в хранилище браузера может быть примерно таким:
    if (window.location.hash != '') {
      var hash = window.location.hash.substring(1);
      var accessToken = hash.substr(hash.indexOf('access_token=')).split('&')[0].split('=')[1];
      sessionStorage.setItem('access_token', accessToken);
      // для безопасности, из url лучше удалить access_token
      window.location.hash = '';
      // window.location.href = window.location.href.substr(0, window.location.href.indexOf('#'))
    }
    
    // и далее использовать сохраненный маркер доступа
    var currentAccessToken = sessionStorage.getItem('key');
    Ответ написан
    Комментировать
  • Где можно найти best practices по программированию?

    10182766_0_Patterni_proektirovaniya.jpg
    Ответ написан
    Комментировать
  • Вопрос по коду bootstrap?

    kimono
    @kimono
    Web developer
    Строка уверяет вас, что будет передан именно объект config. Либо false.
    Ответ написан
    Комментировать
  • Изменение координаты при скролле?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Она изменяется все время. Просто каждый раз устанавливается значение 20px. Вы же не суммируете с уже имеющимся значением.

    $(window).on('scroll', function() {
      var elemTop = parseInt($('div').css('top')) + 20;
      
      console.log(elemTop);
      
      $('div').css('top', elemTop + 'px');
    });


    А нужному элементу в css дайте значение top: 0, если оно не стоит с другим значением

    Фиддл
    Ответ написан
    Комментировать
  • Примеры сложной верстки?

    sabramovskikh
    @sabramovskikh
    www.awwwards.com Вот примеры
    Ответ написан
    Комментировать
  • Примеры сложной верстки?

    @senselessV7
    Для каждого по разному!
    Кому-то анимация, анимированые эффекты!
    Кому-то поддержка ие8 и прочих старых версий браузеров, а кому-то, наоборот, сложно даются новые возможности html5 (flexbox как пример), адаптивность!
    Кому-то много страниц с множеством элементов, потому что все это долго и нудно.
    А кому-то, где много js.

    А чтобы общепринятого понятия "сложной верстки", что-то не слыхал о таком!
    Ответ написан
    Комментировать
  • Где найти курсы?

    ogarich89
    @ogarich89
    Front-End Developer
    vk.com/uwebdesign

    vk.com/it__daily

    vk.com/proglib

    vk.com/loftblog

    vk.com/webtackles

    На youtube sorax, master css , технопарк
    Ответ написан
    Комментировать
  • Как стилизовать select средствами bootstrap?

    @vylegzhanin
    Добавь <select class="form-control">
    Ответ написан
    Комментировать
  • Как стилизовать select средствами bootstrap?

    Хочу добавить, что для удобства можно еще использовать Bootstrap-chosen либо Bootstrap-select. Стили можно, потом причесать ручками.
    Ответ написан
    Комментировать
  • Как стилизовать select средствами bootstrap?

    PavelK
    @PavelK
    Ответ написан
    Комментировать
  • Можно ли сверстать такое адаптивно?

    YuriMolotov
    @YuriMolotov
    Дизайн и вёрстка сайтов — Molotov.pro
    Тут куча вариантов, в зависимости от того, как это должно адаптироваться, вот пара:

    1. Пропорциональное уменьшение:
    Три колонки (длинные дивы) с шириной 33.3%, у изображений width:100%; height:auto;

    2. Блочный перенос.
    Ширина блоков фиксированная (скажем 300px;), сама фирура формируется посредством отступов сверху 1 и 3 блоков (margin-top:200px;), float:left. При размерах экрана меньше скажем 960px фигура распадается, блоки идут рядом:
    @media screen and (max-width: 960px) {
    div {margin-top:0;}}


    И так далее.
    Зная ширину и высоту блоков с помошью @media можно сделать с ними всё, что угодно, т.к. вариантов "обрезания" у нас всего три: все столбцы влезают (по-умолчанию), 2 влезают, 1 влезает (можно его под экран подогнать). Для каждого варианта не сложно прописать свои абсолютно любые изменения компоновки.
    Ответ написан
    Комментировать
  • Можно ли сверстать такое адаптивно?

    @Alex_mc
    Веселый препод :)
    да, варианта два:
    1. каждый столбик будет адаптивной колонкой , первые два с отступами сверху.
    2. более гиморойный margin с отрицательными значениями в одной из колонок.

    это на уровне css. можно и шаманить с js.
    Ответ написан
    Комментировать
  • Как вставить css файл в stylus?

    @someden Автор вопроса
    Разобрался. При компиляции просто указать 'include css': true
    .pipe(stylus({
          'include css': true
    }))
    Ответ написан
    2 комментария