# 🎨 ИспользованиС UI ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: Π’Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ списки (Dropdowns) Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Magistr ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ **ΠΏΡ€Π΅ΠΌΠΈΠ°Π»ΡŒΠ½Π°Ρ кастомная Π΄ΠΈΠ·Π°ΠΉΠ½-систСма** Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… списков. Π’ связи с ограничСниями Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Π½Π° ΡΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартных элСмСнтов `` Π½Π° всём сайтС, прСвращая ΠΈΡ… Π² красивыС Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ мСню. Π’Π°ΠΌ **Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ** ΠΏΠΈΡΠ°Ρ‚ΡŒ слоТный HTML, всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ автоматичСски! ### Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ список: ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‚Π΅Π³ ` ``` ### Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: 1. Π’ Ρ„Π°ΠΉΠ»Π΅ `frontend/admin/js/dropdown.js` инициализируСтся Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ **`MutationObserver`**. 2. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ любой скрипт ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° страницы добавляСт `` (Π½ΠΎ оставляСт Π΅Π³ΠΎ доступным ΠΈΠ· JS!). - РисуСт ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π΅Π³ΠΎ красивый `div.custom-select-wrapper` с Π½ΡƒΠΆΠ½Ρ‹ΠΌ тСкстом, ΠΈΠΊΠΎΠ½ΠΊΠΎΠΉ-ΡˆΠ΅Π²Ρ€ΠΎΠ½ΠΎΠΌ ΠΈ эффСктом размытия Ρ„ΠΎΠ½Π°. - Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ состояния (Ссли Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ элСмСнт Π² кастомном UI, ΠΎΠ½ автоматичСски ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ `select.value` ΠΈ ΠΊΠΈΠ½Π΅Ρ‚ событиС `change`). ### ДинамичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ списка (Ρ‡Π΅Ρ€Π΅Π· JS): Если Π²Ρ‹ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ список с API, просто ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ `innerHTML` **Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСлСкта**, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ: ```javascript const select = document.getElementById('my-new-select'); select.innerHTML = ''; ``` **Магия!** ЭкзСмпляр `CustomSelect` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свой собствСнный Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ `MutationObserver` для отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ `