Десктопщик познает веб, часть вторая

Я долго не писал, потому что меня забанили здесь (P.S. еще до того, как это стало мейнстримом)

Итак, название первой было "Я хочу научиться писать простой современный веб-сайт" часть первая https://pikabu.ru/story/ya_khochu_nauchitsya_pisat_prostoy_s... П - программист, Н - новичок.

П: Итак, CSS-фреймворки по сути это библиотека уже готовых компонентов со стилями, что очень упрощает и ускоряет верстку. Одно из популярных из них является Bootstrap, которая включает в себя адаптивную верстку. На ноутбуке сайт отображает так, на планшете по-другому, на смартфоне этак. Попробуй.

Н: Ну наконец-то! Удобства! Становится приятно работать. Создам-ка я темное меню (navBar-dark). Мммм, что-то мне не нравятся ссылки серого цвета. Сделаю-ка я их белым цветом. Так, если убрать navbar-dark класс, они приобретают стандартный синий цвет, поэтому оставляем этот класс и просто меняем цвет тексту вот так:

.navbar-dark a{

color: red;

}

Но цвет не изменился! Почему? Смотрим стили, OMG, сколько классов чтобы просто изменить цвет.

.navbar-dark .navbar-nav .active>.nav-link, .navbar-dark .navbar-nav .nav-link.active, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .show>.nav-link {

color: #fff;

} (это стили для активной ссылки, я знаю, просто для примера)

Зачем? Зачем они это делают? Зачем они добавляют столько классов к одному элементу, это же нарушает принцип, ради которого и был создан CSS: разделение описаний структуры и внешнего вида.

П: Единообразие кода, возможная защита при подключение внешнего стиля, чтобы он не переписал текущий стиль. Изучай. (P.S. А знаете, веб улучшается. Я, помня с каким трудом менял цвет меню в Bootstrap 3, попробовал повторить тоже самое в 4 – и был приятно удивлен. Поэтому про использования стилей !important для переименование стандартных стилей не пришлось писать, хотя в 3 это было и я хотел про это написать.)

Н: Привет… Словом, проблема с выпадающим меню.

П: Что на этот раз?

Н: Словом, когда я навожу мышь, и с помощью псевдокласса hover появляется выпадающее меню. Но меня это не устраивает. Я хочу, чтобы меню появлялось тогда, когда я щелкаю по нему левой кнопкой мыши. Я нашел похожий псевдокласс active: меню появляется, когда я нажимаю на него левую кнопку мыши, но исчезает, если её отпускаю.

П: Если тебе нужен CSS, попробуй всякие хаки (велосипеды), типа использование чекбоксов, :focus. А для того, чтобы стиль использовался для клика мыши, тебе лучше изучить и использовать язык программирования JavaScript, чтобы делать обработку событий мыши.

Н: Ну вот почему, почему опять двадцать пять! Почему, если я навожу мышку на элемент, то стиль срабатывает, навожу фокус, то стиль срабатывает, нажимаю и не отпускаю левую кнопку мыши, то стиль все еще работает, а если просто сделать по элементу клик, то неееет, так уже делать нельзя, тут уже нужен JavaScript. А разве наведение мышки на элемент, удержание левой кнопки мыши - это разве не события мыши? (Да, я знаю, раньше даже такого функционала в CSS2 не было, только в JavaScript’e)

П: Нууу… да, есть такие события. Изучай JavaScript. Он позволяет производить математический операции, обработка данных на клиенте, взаимодействовать с пользователем и событиями. Изучай.

...

Н: Слушай, тут такая проблема. Я изучил JavaScript, потом скачал плагин календаря на сайт, решил его настроить, а там синтаксис кода непонятный, доллары везде отображаются…

П: Пф… Это означает, что плагин платный. Типа ватермарки в коде.

Н: Правда?

П: Нет же, это JQuery. Это библиотека JavaScript, которая позволяет легко взаимодействовать и получать доступ к элементам (тегам).

Н: Какая еще библиотека, у неё синтаксис другой! Похоже на другой язык.

П: Нет. Ты с легкостью можешь использовать там JavaScript. JQuery использовали, так как на тот момент возможности JavaScript’a были весьма скудны.

Н: Мда… А, знаешь, мне начинает нравится. Удобно обращаться с DOM, синтаксис доступа к элементам похож на CSS код. Есть множество плагинов. Есть приятный Ajax, не надо перезагружать страницу. Да и JQuery обладает столькими полезными функциями, что даже можно не использовать стандартные функции JavaScript…

П: JQuery считается устаревшим.

Н: Но, но как! Почти все плагины, которые я знаю, требуют JQuery. Даже Bootstrap 4!

П: Поверь мне, лучше углубиться в JavaScript. Изучай.

Часть 3 уже на подходе, общий итог и неожиданный поворот гарантирован. Будет ближе к вечеру.

2
Автор поста оценил этот комментарий

синтаксис же языка разный

Нет, это обыкновенный JS, который вполне понятен браузеру "из коробки".

Вот, скажем, JSX или TypeScript - это действительно другой синтаксис, потому требует препроцессинга, для трансляции его в обыкновенный JS.


Там требуется document, там требуется $, это не одно и тоже.

$ - это валидный идентификатор JS, как _ и прочие. Если $ заменить, скажем, на a2 это тоже будет "другой синтаксис языка"?


Нельзя же написать $.getElementById('id')

Почему же нельзя? jQuery не на эльфийском же написана.


const $ = { getElementById: document.getElementById.bind(document) };

$.getElementById('id'); // OK


...или document('#id')

Аналогично можно. С той лишь разницей, что в API браузера уже есть глобальный объект document.

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

Синтаксис селекторов jQuery (внутренний язык этой библиотеки!) является интересным гибридом спецификаций CSS 1, 2, немного CSS 3, немного XPath и еще малость других расширений. ПРУФ https://habr.com/ru/post/31239/ Его называют даже внутренним языком библиотеки, а не JS

показать ответы
Автор поста оценил этот комментарий

Поясню автору причины непонимания. Фундаментальные изменения у бэкендовых фреймворков происходят нечасто. У фронтовых таковые наблюдаются каждый год. Каждый год (а если присмотреться, то и каждые полгода) новые подходы, новые версии и куча всего.

JQuery неудобен в первую очередь тем что лишён адекватной архитектурой составляющей, это тупо набор методов. Делать на нем 2-3 анимации, слайдер и отправку формочки контактов без релоада удобно. Делать полноценную SPA - смерти подобно.

Твой ментор в целом говорит по делу. Учи JS только так по итогу будет понимание того, как все работает, только так ты сможешь выкурить TS, и только так добраться до нормальных фреймворков вроде Angular и React.


А вообще у тебя все как по учебнику, только с пропусков важных стадий)))

1) Гребаный фронт почему все через жопу!

2) ООО, бутстрап, джеквери, все не так плохо;

3) Гребаный джеквери! Неужели нельзя сразу писать нормально?

4) ООО, фреймворки. Оказывается все отлично;

5) Блин в них ничего нет, как прикрутить сюда джеквери?

6) В своих проектах помимо {{ frameworkName }} я юзаю: {{ namesOf20Libs }} и тайпскрипт ибо типизация збс;

7) Сраное говно я ничего не понимаю в этом говне, куча зависимостей, некоторые конфликтуют, гребная типизация...

8) Хм... Оказывается JS может это;

9) И ещё вот это;

10) И это тоже 0_0 Зачем мне эта куча криво написанных библиотек?

11) Знаю хуеву гору библиотек и подходов. Использую любимый фреймворк и 1-2 библиотеки. Кайфую от тайпскрипта. С огромной осторожностью отношусь к сторонним модулям...


Говорят дальше есть ещё стадии)))

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Кстати, все хвалят TypeScript. Я его не юзал, можно вопрос, там тоже требуется nodeJS чтобы его установить?

показать ответы
Автор поста оценил этот комментарий

Поясню автору причины непонимания. Фундаментальные изменения у бэкендовых фреймворков происходят нечасто. У фронтовых таковые наблюдаются каждый год. Каждый год (а если присмотреться, то и каждые полгода) новые подходы, новые версии и куча всего.

JQuery неудобен в первую очередь тем что лишён адекватной архитектурой составляющей, это тупо набор методов. Делать на нем 2-3 анимации, слайдер и отправку формочки контактов без релоада удобно. Делать полноценную SPA - смерти подобно.

Твой ментор в целом говорит по делу. Учи JS только так по итогу будет понимание того, как все работает, только так ты сможешь выкурить TS, и только так добраться до нормальных фреймворков вроде Angular и React.


А вообще у тебя все как по учебнику, только с пропусков важных стадий)))

1) Гребаный фронт почему все через жопу!

2) ООО, бутстрап, джеквери, все не так плохо;

3) Гребаный джеквери! Неужели нельзя сразу писать нормально?

4) ООО, фреймворки. Оказывается все отлично;

5) Блин в них ничего нет, как прикрутить сюда джеквери?

6) В своих проектах помимо {{ frameworkName }} я юзаю: {{ namesOf20Libs }} и тайпскрипт ибо типизация збс;

7) Сраное говно я ничего не понимаю в этом говне, куча зависимостей, некоторые конфликтуют, гребная типизация...

8) Хм... Оказывается JS может это;

9) И ещё вот это;

10) И это тоже 0_0 Зачем мне эта куча криво написанных библиотек?

11) Знаю хуеву гору библиотек и подходов. Использую любимый фреймворк и 1-2 библиотеки. Кайфую от тайпскрипта. С огромной осторожностью отношусь к сторонним модулям...


Говорят дальше есть ещё стадии)))

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

"Твой ментор в целом говорит по делу" - эм... а может быть я ментор?)) в части первой объяснение

показать ответы
Автор поста оценил этот комментарий

Его называют даже внутренним языком библиотеки, а не JS

Наверное не "даже", а "на самом деле", ибо JS он никак не меняет. ES вообще не в курсе существования селекторов, это просто глобальная функция ($), принимающая строку (строковый литерал с селектором).

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

Ну хорошо, но ты согласен, что используя только JQuery можно забыть стандартные функции JS?

показать ответы
1
Автор поста оценил этот комментарий

document.querySelectorAll('#id');

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

? и что с того, синтаксис же языка разный. Там требуется document, там требуется $, это не одно и тоже. Нельзя же написать $.getElementById('id') или document('#id')

показать ответы
Автор поста оценил этот комментарий

это JQuery. ...

Н: Какая еще библиотека, у неё синтаксис другой! Похоже на другой язык.

Всегда было интересно: где в jQ люди находят другой синтаксис? Обычный JS же и строковые литералы с селекторами.

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

document.getElementById('id') === $('#id')

показать ответы