CSS-модули, SASS/SCSS и сброс стилей в React-приложении

Поділитися
Вставка
  • Опубліковано 29 лис 2024

КОМЕНТАРІ • 96

  • @konstantinvolkov2629
    @konstantinvolkov2629 2 роки тому +4

    Капец музыкальная вставка напугала без предупреждения)))) Я полез проверять откуда звук идет по соседним вкладкам ))) За видео спасибо

  • @РоманСивец-т5м
    @РоманСивец-т5м Рік тому +2

    Михаил, спасибище огромнейшее. Про общие и модуле после курсов было понятно и использовал модули, а вот про sass/scss ничего не знал, но у нас большинство работодателей требуют это и за 18 минут я овладел знаниями))))) просто супер!

  • @never.m1nd
    @never.m1nd 7 місяців тому +1

    Вот люблю такие видео - где не спеша и все по полочкам, но при этом без лишней воды 👍

  • @ВадимСергеев-р2э
    @ВадимСергеев-р2э 2 роки тому +4

    Спасибо, Михаил! Ваши объяснения легкие и понятные, как-будто я и так все это знаю и умею. Вы учите так, что в каждом слове чувствуется уверенность в том, что делаете, и опыт. Все ясно и понятно.

  • @lerrrrka
    @lerrrrka 2 роки тому +4

    Большое спасибо за это видео! За 18 мин получила больше информации, чем из множества других) видео ответило на все вопросы по стилизации в реакт, даже на те, которые я здесь и не искала)

  • @Pipal96
    @Pipal96 2 роки тому +2

    Просто прекрасно! На столько моих вопросов ответил которые у меня были в голове, что просто восторг!

  • @CatWoman-sr4pk
    @CatWoman-sr4pk 8 місяців тому

    какое замечательное объяснение, спасибо большое

  • @dexterholland4430
    @dexterholland4430 Рік тому +1

    Именно то, что искал!
    Спасибо тебе большое, бро 🔥

  • @samolevich
    @samolevich 2 роки тому

    Спасибо. Наконец-то нашёл видео, в котором рассказали про префиксы.

  • @demid088web
    @demid088web Рік тому +1

    Спасибо большое!
    Все четко и по делу!

  • @erzhan225
    @erzhan225 2 роки тому

    Спасибо. Согласен с комментариями. Очень кратко и по делу.

  • @МатвейМанько-ь6ч

    Спасибо! Очень здорово информация структурирована и преподнесена!

  • @vld3237
    @vld3237 2 роки тому +1

    Очень полезный и понятный урок, спасибо тебе

  • @MrGreen-zs7on
    @MrGreen-zs7on 3 роки тому +6

    Как всегда лаконично и понятно, огромное спасибо за такой информативный канал!)

  • @anafro_ru
    @anafro_ru Рік тому

    Спасибо большое! Очень просто объяснили :)

  • @mrbolshakov12
    @mrbolshakov12 2 роки тому

    Спасибо большое! Максимально понятно и быстро

  • @petrovpetrov6095
    @petrovpetrov6095 2 роки тому

    Спасибо за видео !всегда приятно слушать вас

  • @yakut54
    @yakut54 3 роки тому

    Миша, Спасибо за науку!

  • @anurovinfo
    @anurovinfo Рік тому

    Круто🔥

  • @bjol_Dg
    @bjol_Dg Рік тому

    круто, спасибо Миша, очень чётко, всё по полочкам, всё понятно 👍👍👍👍👍👍

  • @СергейПетров-б4щ4ч

    Супер! Спасибо!

  • @sergey_zatsepin
    @sergey_zatsepin 2 роки тому

    Прикольно, спс за видос.

  • @RK-yk3hj
    @RK-yk3hj 2 роки тому +1

    супер канал, просто бомба

  • @oleg_andrianov
    @oleg_andrianov 2 роки тому

    Круто, спасибо!

  • @sammylain
    @sammylain 7 місяців тому

    Очень нравятся ваши видео, одни из лучших объяснений на ютубе!
    По SCSS - никак не пойму его использование при модульном подходе. Вложенность это удобно, но ведь это далеко не все возможности SCSS. Но идея делать импорты миксинов и прочего в модульные файлы кажется мне неправильной - ведь модульные файлы подразумевают некую независимость? А если мы будем делать импорты, то они обрастут этими зависимостями с внешними файлами

    • @mishanep
      @mishanep  7 місяців тому +1

      Зависит от настроек. У нас на проекте мы не импортируем миксины, но используем их. Пришлось пошаманить немного с настройками сборки.

    • @sammylain
      @sammylain 7 місяців тому

      @@mishanep оо вот где собака зарыта, спасибо! Теперь понятно, в какую сторону копать)

  • @mivalb7979
    @mivalb7979 3 роки тому

    Спасибо, полезное видео!

  • @write-code
    @write-code Рік тому +1

    На 3:17 вы добавляете в папку с компонентом файл index.js и говорите, чтобы "комфортно это дело экспортировать". Так и не понял для чего это нужно? Файл же пустой? Я так понял.

    • @true227
      @true227 11 місяців тому

      такая же фигня

    • @noplex6228
      @noplex6228 11 днів тому

      оттуда происходит реэкспорт стилей, чтобы у импорта ссылка была не сильно громоздкой, если ошибаюсь - поправьте 😅

  • @romanroman5820
    @romanroman5820 2 роки тому

    Михаил, спасибо!
    У меня к сожалению less c css-modules не заработал.

  • @Pink_Piglin
    @Pink_Piglin 2 роки тому

    Спасибо !
    5/5 звезд тебе.

  • @velikorossnationalist4259
    @velikorossnationalist4259 Рік тому

    Отличное видео! А про styled components у Вас есть видео?

    • @mishanep
      @mishanep  Рік тому +1

      Отдельного нет. Был проект про страны, где он для стилизации использовался.

    • @velikorossnationalist4259
      @velikorossnationalist4259 Рік тому

      Спасибо! Посмотрю.

  • @remis9966
    @remis9966 3 роки тому +1

    Видео полезное спасибо,а да как я понял в jsx можно забыть про работу с css посредством native js?да и html элементы выбирать уже не получится?а что делать если хочешь прочитать или создать свои свойства в тэгах html

  • @volselongames4505
    @volselongames4505 2 роки тому

    Здарова Друг, а не подскажешь как правильно именовать css модули?

  • @evgeniy3370
    @evgeniy3370 2 роки тому

    Михаил здравствуйте, а можно ли данный гайд использовать для приложения на next.js?

  • @ЕленаКазакова-о1э4и

    спасибо за видео! Не понятно, почему 'медиазапросы через sass писать гораздо удобнее'? В css они же точно так же пишутся, как и в приведённом в ролике примере.

    • @mishanep
      @mishanep  2 роки тому

      В css разве появилась возможность писать вложенные стили?
      Потом мы рассмотрели базовый пример, для scss есть много подходов значительно упрощающих медиазапросы, чтобы писать не размеры конкретные, а словами mobile, tablet и т.д.

  • @bark205
    @bark205 Рік тому

    а как вы решаете проблему inport-normalize - Unknown at-rule ?????

    • @mishanep
      @mishanep  Рік тому

      Не знаю о какой проблеме идёт речь. Не помню, чтобы встречал.

  • @andreybalatsan9336
    @andreybalatsan9336 3 роки тому +1

    Приветствую Михаил, а подскажите такую информацию. В верстке я делал на препроцессоре sass. И у меня был файл style где импортировались все миксины, шрифты, цвета и прочие глобальные привязки, а так же блоки стилей для файлов. А как их привязать в реакте?

    • @mishanep
      @mishanep  3 роки тому +3

      Я бы предложил посмотреть в сторону css-переменных. Завести их один раз на глобальном уровне, в index.css и использовать их уже по необходимости.
      С миксинами сложнее. Вероятно, придется их непосредственно в css-подули подключать по необходимости.

    • @andreybalatsan9336
      @andreybalatsan9336 3 роки тому

      @@mishanep спасибо большое

  • @artgurianov
    @artgurianov 3 роки тому +3

    Отличное видео! А как при таком подходе обращаться из js к сгенерированным классам, например для анимации?

    • @mishanep
      @mishanep  3 роки тому +8

      Приветствую!
      Могу не до конца понять вопрос, но попробую ответить.
      Я так понял, что речь конкретно про css-модули и про то, как динамически добавлять/снимать css-классы средствами js. Для этих целей удобно использовать дополнительную библиотечку, вроде classnames. Будет получаться примерно следующее.
      import {useState} from 'react';
      import cn from 'classnames';
      import classes from './MyComponent.module.css';
      const MyComponent = () => {
      const [isActive, setActive] = useState(false);
      const main = cn({
      [classes.active]: isActive,
      });
      return (
      )
      }
      В данном случае переменная main будет представлять собой строку с набором css-классов по условию. Если ключ имеет значение true, то он будет включен в строку с набором css-классов, если false - то нет.

  • @littlegrownbeats
    @littlegrownbeats 2 роки тому

    Очень классно и просто! Все что нужно! Огромная благодарность!)

  • @АрчибальтГугенов

    Добрый день! Подскажите, пожалуйста. Например, у меня есть button className={styles.button}
    Я хочу поменять стили этой кнопке, когда на нее кликну . К примеру, поменяется background-color - button className={styles.buttonActive}
    В разметке я пишу className={условие ? styles.buttonActive : styles.button};
    Но тогда получается мне нужно в стилях помимо background-color дублировать все свойства кнопки, как для активной, так и для пассивной.
    Как можно оптимизировать этот случай?

    • @mishanep
      @mishanep  Рік тому

      Вам просто нужно два css-класса передавать на элемент. Один - постоянный с базовыми стилями кнопки, второй - как модификатор, отвечающий за разные состояния.

    • @АрчибальтГугенов
      @АрчибальтГугенов Рік тому

      @@mishanep понимаю, о чем вы. Но не знаю, как это выглядит синтаксически. Как передать в эту запись второй класс с модификатором, если она не принимает ничего кроме CamelCase и только один класс?
      button className={styles.buttonActive}

    • @mishanep
      @mishanep  Рік тому

      @@АрчибальтГугенов className принимает строку, в строке могут быть пробелы. По сути вы передаёте туда шаблонную строку с постоянной и динамической частью. Либо используете для удобства внешнюю библиотеку вроде classnames

    • @АрчибальтГугенов
      @АрчибальтГугенов Рік тому

      @@mishanep понял. Благодарю!

  • @batm1x
    @batm1x 2 роки тому

    На 15:50 вроде хотели показать как сбрасывать стили, но показали некий normalize, который добавляет какую-то стилизацию. А как сбросить стили в 0? P.S. Аа, normalize это усовершенствованный reset. Только все равно чет не работает, normalize.css подключается к элементу, но стили в нем перечеркнуты. Как сделать, чтоб стили ант дизайна не перекрывали normalize?

    • @mishanep
      @mishanep  2 роки тому +1

      А зачем вы хотите сбросить стили библиотеки UI элементов? Они ж для того и писались, чтобы их использовать из коробки.

    • @batm1x
      @batm1x 2 роки тому

      @@mishanep уточню, что хотел, почти получилось. В index.css я сначала сбросил стили, подключив reset.css, затем поставил стили из ант.
      Ниже прописал стиль body, чтоб оставить шрифт, но body стили все равно перечеркнуты на элеменатх, соответственно стиль дефолтный после сброса. Что я делаю не так?
      @import '~reset-css/reset.css';
      @import 'antd/dist/antd.css';
      body {
      margin: 0;
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
      'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
      sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      font-size: 14px;
      }

    • @batm1x
      @batm1x 2 роки тому

      вроде разобрался, добавил body,
      html,
      #root,
      .wrapper {
      стили
      }

    • @batm1x
      @batm1x 2 роки тому

      @@mishanep теперь проблема, если перезагрузить приложение, @import '~reset-css/reset.css' будто загружается последний и не работает(( Если его вручную удалить и поставть - опять ненужные стили сбросятся.

    • @batm1x
      @batm1x 2 роки тому

      @@mishanep всё, реализовал как хотел
      в index.css стили вставляются в такой последовательности
      @import 'antd/dist/antd.css';
      @import '~reset-css/reset.css';

  • @oleg_andrianov
    @oleg_andrianov 2 роки тому

    Еще не досмотрел, но хочется вот узнать, почему из index.js удобнее экспортировать компонент, а не из component.jsx?

    • @mishanep
      @mishanep  2 роки тому

      Это фасад. Импорты всегда будут идти из индексного файла, а внутри мы можем менять структуру потом как хотим. Единственное место, где надо будет править импорт, index.js

    • @oleg_andrianov
      @oleg_andrianov 2 роки тому

      @@mishanep я делал импорт из jsx файла и из index.js и не заметил разницы. Я наверное что-то упускаю, только не знаю что.

  • @2d6ru
    @2d6ru 2 роки тому

    Получается БЭМ поверх modules.css уже бессмысленен (как минимум на уровне компонента), только место будут занимать наименования?

    • @mishanep
      @mishanep  2 роки тому +1

      Я встречал и помесь модулей с бэм на одном из крупных проектов. Тоже не понял зачем это нужно было))

    • @2d6ru
      @2d6ru 2 роки тому +1

      @@mishanep привычка, м. б. %)

  • @BuenosAeros
    @BuenosAeros 2 роки тому

    а как вы пересохранили файл со стилями, что он не бы минифицирован ? а то у меня венорные префиксы не проставляются

  • @TheTurbobarbitura
    @TheTurbobarbitura 2 роки тому

    Михаил, а как получить доступ к стилям, при использовании реакта с модулями, из JS? По аналогии с чистым JS - получаем доступ к элементу, потом вешаем на него слушатель события и по, например клику, ()=>{event.target.style.background = 'red'}. Как подобное сделать на реакте с модулем?

    • @mishanep
      @mishanep  2 роки тому

      Приветствую!
      Здесь скорее вам какие-то булевые ключи в стейте компонента понадобятся и по событиям вы будете обновлять их. А уже от булевых ключей может зависеть набор css-классов, которые вы повесите на тот или иной элемент, либо содержимое атрибута style.
      Для удобства комбинирования разных css-классов, будь то модули и просто строки, удобно использовать библиотеку classnames или ее аналоги.

    • @TheTurbobarbitura
      @TheTurbobarbitura 2 роки тому +1

      @@mishanep через хук useRef получилось реализовать. Недооценивал раньше его. Все его преподносят как хук для работы с инпутами. Оказывается через него можно на любой дом элемент воздействовать на прямую.

  • @АртемАниськин-н6г
    @АртемАниськин-н6г 2 роки тому +1

    Если что сейчас node-sass уже устарел, так что нужен просто sass пакет

  • @vladimirplyukhin5234
    @vladimirplyukhin5234 2 роки тому

    Михаил, добрый день
    Появился вопрос: скажите, пожалуйста, если я использую SCSS и module.scss, то можно обойтись без BEM naming в среднем по-размеру проекте?
    Или лучше разбивать по module с BEM naming?

    • @mishanep
      @mishanep  2 роки тому +1

      Да, вполне можно обойтись без бэм.

    • @vladimirplyukhin5234
      @vladimirplyukhin5234 2 роки тому

      @@mishanep Спасибо!

  • @ramankarseka7362
    @ramankarseka7362 2 роки тому

    а есть ли возможность module.scss описывать вложенные классы?
    например, класс active для react-router-dom
    .element{
    &.active{
    color:red;
    }
    }

    • @mishanep
      @mishanep  2 роки тому

      Если вложенный класс формируется не динамически, то вполне.

  • @yakut54
    @yakut54 3 роки тому

    Объясни пожалуйста это финт с export { default } from './App';
    ну или где почитать про это можно. Не сталкивался с такой записью никогда.

    • @mishanep
      @mishanep  3 роки тому +3

      Это он экспорт. Импорт и сразу экспорт. Одной строчкой. Default делает реэкспорт того, что было экспортированно по умолчанию.

    • @yakut54
      @yakut54 3 роки тому

      @@mishanep нятно... поиграться надо.

  • @madinmt
    @madinmt 3 роки тому

    Здравствуйте Михаил:) подскажите как добавлять дополнительные классы? На один элемент)

    • @mishanep
      @mishanep  3 роки тому +1

      Как вариант, можно создать переменную и хранить в ней css классы. Чтобы удобно было работать с классами динамически, можно посмотреть в сторону библиотеки classnames. Она автоматически формирует строку с набором классов по условиям.

    • @madinmt
      @madinmt 3 роки тому

      @@mishanep спасибо😊

  • @PoRoKLusT
    @PoRoKLusT 2 роки тому

    Спасибо, понятно, уже попробовал - работает, удобно. За видео лайк/подписка.
    А как подгружать глобальные переменные в модули (например цвета) с общего css файла? В доке написано для этого использовать композицию, например:
    .otherClassName {
    composes: className from "./style.css";
    }
    но у меня ругается на слово composes - среда подчеркивает его и пишет unknown property.

    • @vitya.obolonsky
      @vitya.obolonsky Рік тому

      краще звичайни scss заюзать

  • @vitya.obolonsky
    @vitya.obolonsky Рік тому

    module.css понижує performance сайту

    • @true227
      @true227 11 місяців тому

      откуда информация?

    • @vitya.obolonsky
      @vitya.obolonsky 11 місяців тому

      @@true227гугли

  • @serhioramires3166
    @serhioramires3166 Рік тому

    Немного не для совсем начинающих. Неприятно гремит клавиатура и еще что-то....
    В целом спасибо за видео.

  • @_kie
    @_kie 3 роки тому

    С 15:35 пропадает запись до 16:04.

    • @mishanep
      @mishanep  3 роки тому

      Спасибо, что написали. Поправлю.

  • @Алексей-т2х8й
    @Алексей-т2х8й 2 роки тому

    +

  • @komdiv4906
    @komdiv4906 Рік тому

    Счас я вам раскажу как устанавливать scss. Поняли? Ну если вы умеете им пользоваться то у вас все получится. Это как я вам показал как прыгать в бассейн. научились? А те кто умеет прыгать знают как в бассейн воду наливать и сделают это.

    • @mishanep
      @mishanep  Рік тому +1

      У каждой темы есть пререквизит. Если вы не умеете плавать, то и прыгать в бассейн было бы странно. Если вы работаете с React-приложением, но не умеете пользоваться npm или плохо знаете JavaScript, вероятно вы слишком рано взяли за Реакт. Если же вы не пользуетесь css-препроцессорами, то, может, оно вам и не надо, и вы просто сможете использовать css-модули после просмотра данного видео. По SASS есть целые многочасовые курсы. И изучение данного инструмента в цели этого видео не входило.

  • @graa999
    @graa999 3 роки тому +2

    что за там-там с барабанами на фоне всё время звучат? Инфа вроде полезная ,но мои уши...

  • @xxxhonda
    @xxxhonda 2 роки тому

    Подскажите, пожалуйста, что это за тема explorer'а такая? Не могу понять, как загуглить