1) что считается лучшей практикой? Прописывать стили в объекте в скрипте (как в коде этого примера), или же всё таки назначать объекту класс (опять же через setAttribute()) и уже в файле style.css прописывать заранее эти стили?
Проставляя стили по одному вы увеличиваете количество перерисовок. Не стоит так делать. Если нужно за один раз изменить несколько свойств то лучше использовать
style.cssText. Но там есть свои особенности.
Установка класса, выглядит более выгодной в этом плане. Но тут существует другая проблема: Если все ваши стили собираются в один большой бандл, Это означает, что эти вспомогательные классы и их свойства будут загружаться на клиент даже на тех страницах где они не используются.
Кроме того, при изменении классов у родителя, браузер тратит больше ресурсов на анализ дочерних узлов, чем если бы у родителя изменились только стили. Так что выбирайте подход конкретно для своего случая.
И как написали ранее, для управления классами есть
специальный api
2) Есть ли положительные моменты у того или иного способа , если к примеру использовать пример выше для создания формы, или к примеру создать форму в html заранее, просто с visibility: hidden, ну и собственно чтобы она появлялся по клику?
Тут вы должны опираться на шаблон поведения пользователя на вашем сайте. Форма обязательна? Какова вероятность что пользователю она понадобится? Если форма не загрузится или не отобразится, сможет ли пользователь достичь своей цели на сайте?
Проанализируйте эти вопросы. Изучите поведение пользователей. Определите приоритет этой формы. Чем он выше — тем раньше нужно её инициализировать:
- Если пользователь 100% будет заполнять форму и не заполнив её он не сможет продолжить работу с сайтом, тогда форму стоит загрузить и инициализировать как можно раньше. Чтобы она была полностью готова когда она понадобится пользователю.
- Если необходимость в форме мала, а не заполнив её сайт продолжит выполнять свою основную функцию — тогда загружать стили и скрипты, которые инициализируют форму можно только в момент когда форма понадобилась и не раньше.
UPD.
И на последок. Сперва нужно проставить все атрибуты, стили и тп, а уже в самом конце вставлять элемент в DOM. Иначе браузер будет выполнять перерисовку и перекомпоновку на каждый чих. Вместо того, чтобы сделать это один раз при вставке элемента.