დაახლოებით 15 წლის წინ ვმუშაობდი კომპანიაში, სადაც ვაშენებდით აპლიკაციებს ტურისტული აგენტებისთვის, აეროპორტის მუშაკებისთვის და ავიაკომპანიებისთვის. ჩვენ ასევე ავაშენეთ ჩვენი შიდა ჩარჩო ინტერფეისის კომპონენტებისთვის და ერთგვერდიანი აპლიკაციის შესაძლებლობებისთვის. ჩვენ გვქონდა კომპონენტები ყველაფრისთვის: ველები, ღილაკები, ჩანართები, დიაპაზონები, მონაცემთა ცხრილები, მენიუები, თარიღების ამომრჩევები, არჩევები და მრავალარჩევნები. ჩვენ გვქონდა div კომპონენტიც კი. სხვათა შორის, ჩვენი div კომპონენტი შესანიშნავი იყო, ის საშუალებას გვაძლევდა გაგვეკეთებინა მომრგვალებული კუთხეები ყველა ბრაუზერზე, რაც, დაიჯერეთ თუ არა, იმ დროისთვის ადვილი საქმე არ იყო.

ჩვენი მუშაობა მოხდა ჩვენი ისტორიის მომენტში, როდესაც JS, Ajax და დინამიური HTML განიხილებოდა, როგორც რევოლუცია, რომელმაც მოგვიყვანა მომავალში. მოულოდნელად, ჩვენ შეგვეძლო გვერდის დინამიურად განახლება, სერვერის მონაცემების მიღება და სხვა გვერდებზე ნავიგაციის თავიდან აცილება, რაც ნელი იყო და ეკრანზე ორ გვერდს შორის დიდი თეთრი მართკუთხედი აანთო. იყო ფრაზა, რომელიც პოპულარული გახდა ჯეფ ეტვუდის (StackOverflow-ის დამფუძნებელი) მიერ, რომელიც ეწერა: "ნებისმიერი აპლიკაცია, რომელიც შეიძლება დაიწეროს JavaScript-ში, საბოლოოდ დაიწერება JavaScript-ში." - ჯეფ ეტვუდი

ჩვენთვის იმ დროს, ეს გაბედულად გვეჩვენებოდა, რომ რეალურად წავსულიყავით და შეგვექმნა ეს აპლიკაციები. ეს იყო სრული თანხმობა, რომ ყველაფერი გაეკეთებინა JS-თან. ასე რომ, ჩვენ ყველაფერი გავაკეთეთ JS-თან ერთად და დრო ნამდვილად არ დაგვრჩენია საქმის კეთების სხვა გზების შესასწავლად. ჩვენ ნამდვილად არ ვგრძნობდით სტიმულს, რომ სწორად გვესწავლა, რა შეეძლო HTML-სა და CSS-ს. ჩვენ ნამდვილად არ აღვიქვამდით ვებს მთლიანობაში განვითარებად აპლიკაციის პლატფორმად. ჩვენ მას ძირითადად ვუყურებდით, როგორც რაღაცას, რაზეც გვჭირდებოდა მუშაობა, განსაკუთრებით მაშინ, როდესაც საქმე ბრაუზერის მხარდაჭერას ეხებოდა. ჩვენ უბრალოდ შეგვეძლო მეტი JS-ს გადაგვეყენებინა საქმეების შესასრულებლად. დამეხმარა თუ არა დროის დახარჯვა მეტის გასაგებად, თუ როგორ მუშაობდა ვებ და რა იყო პლატფორმაზე ხელმისაწვდომი? რა თქმა უნდა, მე შემეძლო გაპარსულიყო კოდის თაიგული, რომელიც ნამდვილად არ იყო საჭირო. მაგრამ, იმ დროს, შესაძლოა არც ისე ბევრი. ხედავთ, ბრაუზერის განსხვავებები საკმაოდ მნიშვნელოვანი იყო მაშინ. ეს იყო დრო, როდესაც Internet Explorer ჯერ კიდევ დომინანტური ბრაუზერი იყო, Firefox იყო უახლოესი მეორე, მაგრამ დაიწყო ბაზრის წილის დაკარგვა Chrome-ის გამო სწრაფად იძენს პოპულარობას. მიუხედავად იმისა, რომ Chrome და Firefox საკმაოდ კარგად ეთანხმებოდნენ ვებ სტანდარტებს, გარემო, რომელშიც ჩვენი აპლიკაციები მუშაობდა, იმას ნიშნავდა, რომ ჩვენ გვქონდა IE6-ის მხარდაჭერა დიდი ხნის განმავლობაში. მაშინაც კი, როცა IE8-ის მხარდაჭერის უფლება მოგვცეს, ბრაუზერებს შორის უამრავ განსხვავებასთან გვქონდა გამკლავება. არა მხოლოდ ეს, არამედ იმ დროის ვებსაიტს უბრალოდ არ ჰქონდა ამდენი შესაძლებლობა პლატფორმაში ჩაშენებული.

იჩქარეთ დღევანდელი დღისთვის. რამ საოცრად შეიცვალა. ჩვენ არა მხოლოდ გვაქვს ამ შესაძლებლობების მეტი, ვიდრე ოდესმე, არამედ გაიზარდა მათი ხელმისაწვდომობის ტემპი. ნება მომეცით კიდევ ერთხელ დაგისვათ კითხვა: დაგეხმარებით თუ არა დღეს მეტი დროის გასაგებად, თუ როგორ მუშაობს ვებ და რა არის პლატფორმაზე ხელმისაწვდომი? აბსოლუტურად დიახ. ვებ პლატფორმის გაგებისა და გამოყენების სწავლა დღეს დიდ უპირატესობას განიჭებთ სხვა დეველოპერებთან შედარებით. მიუხედავად იმისა, მუშაობთ შესრულებაზე, ხელმისაწვდომობაზე, პასუხისმგებლობაზე, ყველა მათგანზე, თუ უბრალოდ აგზავნით UI ფუნქციებს, თუ გსურთ ამის გაკეთება, როგორც პასუხისმგებელი ინჟინერი, თქვენთვის ხელმისაწვდომი ხელსაწყოების ცოდნა დაგეხმარებათ მიაღწიოთ თქვენს მიზნებს უფრო სწრაფად და უკეთ. ზოგიერთი რამ, რისთვისაც შეიძლება ბიბლიოთეკა აღარ დაგჭირდეთ იმის ცოდნა, თუ რას უჭერს მხარს ბრაუზერები დღეს, ჩნდება კითხვა: რა შეგვიძლია დავტოვოთ? გვჭირდება div კომპონენტი მომრგვალებული კუთხეების გასაკეთებლად 2025 წელს? რა თქმა უნდა, ჩვენ არა. საზღვრის რადიუსის თვისება მხარდაჭერილია ყველა ამჟამად გამოყენებული ბრაუზერის მიერ 15 წელზე მეტი ხნის განმავლობაში. და კუთხის ფორმაც მალე მოდის, კიდევ უფრო ლამაზი კუთხეებისთვის. მოდით გადავხედოთ შედარებით უახლეს ფუნქციებს, რომლებიც ახლა ხელმისაწვდომია ყველა მთავარ ბრაუზერში და რომელთა გამოყენება შეგიძლიათ თქვენს კოდების ბაზაში არსებული დამოკიდებულებების შესაცვლელად. საქმე იმაში არ არის, რომ დაუყონებლივ გათიშოთ ყველა თქვენი საყვარელი ბიბლიოთეკა და გადაწეროთ თქვენი კოდების ბაზა. რაც შეეხება ყველაფერს, ჯერ უნდა გაითვალისწინოთ ბრაუზერის მხარდაჭერა და გადაწყვიტოთ თქვენი პროექტისთვის სპეციფიკური სხვა ფაქტორების საფუძველზე. შემდეგი ფუნქციები დანერგილია ბრაუზერის სამ მთავარ ძრავში (Chromium, WebKit და Gecko), მაგრამ შეიძლება გქონდეთ ბრაუზერის მხარდაჭერის განსხვავებული მოთხოვნები, რაც ხელს შეგიშლით მათ დაუყოვნებლივ გამოყენებაში. ახლა ჯერ კიდევ კარგი დროა, რომ გაეცნოთ ამ ფუნქციებს და, შესაძლოა, რაიმე მომენტში მათი გამოყენება დაგეგმოთ. პოპოვერები და დიალოგები Popover API,

HTML ელემენტი და ::backdrop ფსევდოელემენტი დაგეხმარებათ თავიდან აიცილოთ დამოკიდებულებები ამომხტარ ფანჯარაზე,tooltip და დიალოგური ბიბლიოთეკები, როგორიცაა Floating UI, Tippy.js, Tether ან React Tooltip. ისინი ამუშავებენ ხელმისაწვდომობას და ფოკუსის მენეჯმენტს თქვენთვის, უპრობლემოდ, უაღრესად კონფიგურირებადია CSS-ის გამოყენებით და ადვილად შეიძლება იყოს ანიმაციური. აკორდეონები ელემენტი
, მისი სახელის ატრიბუტი ურთიერთგამომრიცხავი ელემენტებისთვის და ::details-content ფსევდოელემენტი ხსნის აკორდეონის კომპონენტების საჭიროებას, როგორიცაა Bootstrap Accordion ან React Accordion კომპონენტი. უბრალოდ აქ პლატფორმის გამოყენება ნიშნავს, რომ მათთვის, ვინც იცის HTML/CSS, უფრო ადვილია თქვენი კოდის გაგება ისე, რომ ჯერ არ ისწავლოს კონკრეტული ბიბლიოთეკის გამოყენება. ეს ასევე ნიშნავს, რომ თქვენ იმუნური ხართ ბიბლიოთეკაში ცვლილებების დარღვევაზე ან ამ ბიბლიოთეკის შეწყვეტაზე. და, რა თქმა უნდა, ეს ნიშნავს ნაკლებ კოდს გადმოსაწერად და გასაშვებად. ურთიერთგამომრიცხავი დეტალების ელემენტებს არ სჭირდება JS გასახსნელად, დახურვის ან ანიმაციისთვის. CSS სინტაქსი კასკადური ფენები, უფრო ორგანიზებული CSS კოდების ბაზისთვის, CSS ბუდე, უფრო კომპაქტური CSS-ისთვის, ახალი ფერის ფუნქციები, შედარებითი ფერები და ფერების მიქსი, ახალი მათემატიკის ფუნქციები, როგორიცაა abs(), sign(), pow() და სხვა ხელს უწყობს CSS-ის წინასწარ პროცესორებზე დამოკიდებულების შემცირებას, სასარგებლო ბიბლიოთეკებს, როგორიცაა Bootstrap და Tailwind, ან თუნდაც runtime. თამაშის ჩეინჯერი :has(), ერთ-ერთი ყველაზე მოთხოვნადი ფუნქცია დიდი ხნის განმავლობაში, ხსნის JS-ზე დაფუძნებული უფრო რთული გადაწყვეტილებების საჭიროებას. JS Utilities მასივის თანამედროვე მეთოდებს, როგორიცაა findLast(), ან at(), ისევე როგორც Set მეთოდები, როგორიცაა different(), intersection(), union() და სხვა, შეუძლიათ შეამცირონ დამოკიდებულებები ბიბლიოთეკებზე, როგორიცაა Lodash. კონტეინერის მოთხოვნები კონტეინერის მოთხოვნები აიძულებს UI კომპონენტებს რეაგირება მოახდინონ სხვა საკითხებზე, გარდა ხედის ზომისა და, შესაბამისად, მათ უფრო ხელახლა გამოყენებადს ხდის სხვადასხვა კონტექსტში. ამისათვის აღარ არის საჭირო JS-heavy UI ბიბლიოთეკის გამოყენება და არც პოლიფილის გამოყენება. განლაგება Grid, subgrid, flexbox, ან multi-column უკვე დიდი ხანია არსებობს, მაგრამ CSS-ის მდგომარეობის გამოკითხვის შედეგების გათვალისწინებით, ცხადია, რომ დეველოპერები, როგორც წესი, ძალიან ფრთხილები არიან ახალი ნივთების მიღებასთან დაკავშირებით და ელოდებიან ძალიან დიდხანს, სანამ ამას გააკეთებენ. ეს ფუნქციები დიდი ხნის განმავლობაში იყო საბაზისო და შეგიძლიათ გამოიყენოთ ისინი დამოკიდებულებისგან თავის დასაღწევად, როგორიცაა Bootstrap-ის ქსელის სისტემა, Foundation Framework-ის flexbox-ის უტილიტები, Bulma ფიქსირებული ბადე, Materialize grid ან Tailwind სვეტები. მე არ ვამბობ, რომ თქვენ უნდა ჩამოაგდოთ თქვენი ჩარჩო. თქვენმა გუნდმა მიიღო ის გარკვეული მიზეზის გამო და მისი წაშლა შესაძლოა დიდი პროექტი იყოს. მაგრამ იმის დანახვა, თუ რისი შეთავაზება შეუძლია ვებ პლატფორმას მესამე მხარის ზემოდან შეფუთვის გარეშე, ბევრი სარგებელი მოაქვს. ის, რაც შეიძლება აღარ დაგჭირდეთ უახლოეს მომავალში ახლა მოდით გადავხედოთ ზოგიერთ საკითხს, რისთვისაც ბიბლიოთეკა არ დაგჭირდებათ უახლოეს მომავალში. ანუ, ქვემოთ მოყვანილი საგნები არ არის მზად მასობრივი მიღებისთვის, მაგრამ მათი ცოდნა და შემდგომი პოტენციური გამოყენების დაგეგმვა შეიძლება სასარგებლო იყოს. წამყვანის პოზიციონირება CSS წამყვანის პოზიციონირება ამუშავებს პოპოვერების და ხელსაწყოების პოზიციონირებას სხვა ელემენტებთან მიმართებაში და ზრუნავს მათ ხედვაზე, თუნდაც გვერდის გადაადგილების, გადახვევის ან ზომის შეცვლისას. ეს შესანიშნავად ავსებს ზემოთ ნახსენები Popover API-ს, რაც კიდევ უფრო გაადვილებს მიგრაციას უფრო მაღალი ხარისხის JS გადაწყვეტილებებისგან. ნავიგაციის API ნავიგაციის API შეიძლება გამოყენებულ იქნას ნავიგაციის დასამუშავებლად ერთგვერდიან აპებში და შეიძლება იყოს შესანიშნავი შემავსებელი, ან თუნდაც ჩანაცვლება React Router, Next.js მარშრუტიზაციის ან Angular მარშრუტიზაციის ამოცანებისთვის. იხილეთ Transitions API View Transitions API-ს შეუძლია ანიმაცია გვერდის სხვადასხვა მდგომარეობას შორის. ერთგვერდიან აპლიკაციაში, ეს აადვილებს გლუვ გადასვლებს მდგომარეობებს შორის და დაგეხმარებათ თავიდან აიცილოთ ანიმაციური ბიბლიოთეკები, როგორიცაა Anime.js, GSAP ან Motion.dev. კიდევ უკეთესი, API ასევე შეიძლება გამოყენებულ იქნას მრავალგვერდიანი აპლიკაციებით. გახსოვთ ადრე, როცა ვთქვი, რომ მიზეზი, რის გამოც ჩვენ შევქმენით ერთგვერდიანი აპლიკაციები კომპანიაში, სადაც მე ვმუშაობდი 15 წლის წინ, იყო გვერდის გადატვირთვის თეთრი ციმციმის თავიდან აცილება ნავიგაციის დროს? ეს API რომ ყოფილიყო ხელმისაწვდომი იმ დროს, ჩვენ შევძლებდით მივაღწიოთ გვერდის გადასვლის მშვენიერ ეფექტებს ერთგვერდიანი ჩარჩოს გარეშე და მთელი აპლიკაციის უზარმაზარი საწყისი ჩამოტვირთვის გარეშე. გადახვევაზე ორიენტირებული ანიმაციები გადახვევაზე ორიენტირებული ანიმაციები მუშაობს მომხმარებლის გადახვევის პოზიციაზე და არა დროთა განმავლობაში, რაც მათ შესანიშნავ გადაწყვეტად აქცევს ამბის მოთხრობისა და პროდუქტის ტურებისთვის. ზოგიერთმა ადამიანმა ცოტათი გადააჭარბა მას, მაგრამ კარგად გამოყენების შემთხვევაში, ეს შეიძლება იყოს ძალიან ეფექტური დიზაინის ინსტრუმენტი და დაგეხმარებათ თავიდან აიცილოთ ბიბლიოთეკები, როგორიცაა: ScrollReveal, GSAP Scroll ანWOW.js. დააკონფიგურიროთ არჩევანი მორგებადი არჩევა არის ნორმალური <არჩევა> ელემენტი, რომელიც საშუალებას გაძლევთ სრულად დააკონფიგურიროთ მისი გარეგნობა და შინაარსი, ამასთან, უზრუნველყოთ ხელმისაწვდომობა და შესრულების უპირატესობები. ეს უკვე დიდი ხანია მოდის და ძალიან მოთხოვნადი ფუნქციაა და გასაოცარია, რომ ის მალე მოვა ვებ პლატფორმაზე. ჩაშენებული კონფიგურირებადი არჩევით, შეგიძლიათ საბოლოოდ დატოვოთ მთელი ეს ძნელად შესანახი JS კოდი თქვენი მორგებული არჩეული კომპონენტებისთვის. CSS ქვისა CSS Masonry არის კიდევ ერთი მომავალი ვებ პლატფორმის ფუნქცია, რომელზეც მსურს მეტი დრო გავატარო. CSS Masonry-ით შეგიძლიათ მიაღწიოთ განლაგებას, რომელიც ძალიან რთულია, ან თუნდაც შეუძლებელი, flex, grid ან სხვა ჩაშენებული CSS განლაგების პრიმიტივებით. დეველოპერები ხშირად მიმართავენ მესამე მხარის ბიბლიოთეკების გამოყენებას მასონური განლაგების მისაღწევად, როგორიცაა Masonry JS ბიბლიოთეკა. მაგრამ ამის შესახებ მოგვიანებით. მოდით დავასრულოთ ეს წერტილი მასონობაზე გადასვლამდე. რატომ უნდა იზრუნოთ სამუშაო ბაზარი სავსეა ვებ დეველოპერებით JavaScript-ის გამოცდილებით და დღის უახლესი ფრეიმვემებით. მართლაც, რა აზრი აქვს ვებ პლატფორმის პრიმიტიულების უფრო მეტად გამოყენების სწავლას, თუ შეგიძლიათ იგივე გააკეთოთ ბიბლიოთეკებით, კომუნალური პროგრამებით და ჩარჩოებით, რომლებიც დღეს უკვე იცით? როდესაც მთელი ინდუსტრია ეყრდნობა ამ ჩარჩოებს და თქვენ შეგიძლიათ უბრალოდ შეიყვანოთ სწორი ბიბლიოთეკა, განა ბრაუზერის გამყიდველებმა არ უნდა იმუშაონ ამ ბიბლიოთეკებთან, რათა უფრო სწრაფად ჩაიტვირთონ და იმუშაონ, ვიდრე ცდილობდნენ დაარწმუნონ დეველოპერები, გამოიყენონ პლატფორმა? უპირველეს ყოვლისა, ჩვენ ვმუშაობთ ბიბლიოთეკის ავტორებთან და ვაუმჯობესებთ ჩარჩოებს იმის გაცნობით, თუ რას იყენებენ ისინი და გავაუმჯობესებთ ამ სფეროებს. მაგრამ მეორეც, „მხოლოდ პლატფორმის გამოყენებამ“ შეიძლება საკმაოდ მნიშვნელოვანი სარგებელი მოიტანოს. ნაკლები კოდის გაგზავნა მოწყობილობებზე მთავარი სარგებელი ის არის, რომ თქვენ საბოლოოდ აგზავნით ბევრად ნაკლებ კოდს თქვენი კლიენტების მოწყობილობებზე. 2024 წლის ვებ ალმანახის მიხედვით, HTTP მოთხოვნების საშუალო რაოდენობა არის დაახლოებით 70 საიტზე, რომელთა უმეტესობა განპირობებულია JavaScript-ით 23 მოთხოვნით. 2024 წელს JS-მა გადალახა სურათები, როგორც ფაილის დომინანტური ტიპი. JS ფაილებისთვის გვერდის მოთხოვნის მედიანური რაოდენობა არის 23, რაც 8%-ით გაიზარდა 2022 წლიდან. და გვერდის ზომა წლიდან წლამდე იზრდება. გვერდის საშუალო წონა ახლა დაახლოებით 2 მბ-ია, რაც 1.8 მბ-ით მეტია, ვიდრე 10 წლის წინ იყო.

რა თქმა უნდა, თქვენი ინტერნეტ კავშირის სიჩქარეც ალბათ გაიზარდა, მაგრამ ეს ყველასთვის ასე არ არის. და ყველას არ აქვს მოწყობილობის იგივე შესაძლებლობები. მესამე მხარის კოდის ამოღება იმისთვის, რისი გაკეთებაც შეგიძლიათ პლატფორმით, ამის ნაცვლად, სავარაუდოდ, ნიშნავს, რომ თქვენ გაგზავნით მეტ კოდს და, შესაბამისად, მიაღწევთ ნაკლებ მომხმარებელს, ვიდრე ჩვეულებრივ აკეთებთ. ინტერნეტში, ჩატვირთვის ცუდი შესრულება იწვევს მიტოვების დიდ მაჩვენებელს და აზიანებს ბრენდის რეპუტაციას. ნაკლები კოდის გაშვება მოწყობილობებზე გარდა ამისა, კოდი, რომელსაც თქვენ აგზავნით თქვენი მომხმარებლების მოწყობილობებზე, სავარაუდოდ უფრო სწრაფად იმუშავებს, თუ ის იყენებს ნაკლებ JavaScript აბსტრაქციას პლატფორმის თავზე. ის ასევე, ალბათ, უფრო საპასუხო და უფრო ხელმისაწვდომია ნაგულისხმევად. ყოველივე ეს იწვევს უფრო მეტ და ბედნიერ მომხმარებელს. შეამოწმეთ ჩემი კოლეგის ალექს რასელის ყოველწლიური შესრულების უთანასწორობის ხარვეზის ბლოგი, რომელიც გვიჩვენებს, რომ პრემიუმ მოწყობილობები ძირითადად არ არიან მილიარდობით მომხმარებლის ბაზრებზე სიმდიდრის უთანასწორობის გამო. და ეს უფსკრული მხოლოდ დროთა განმავლობაში იზრდება.

ჩამონტაჟებული ქვისა განლაგება ვებ პლატფორმის ერთ-ერთი ფუნქცია, რომელიც მალე მოვა და რომელიც მე ძალიან აღფრთოვანებული ვარ, არის CSS Masonry.

ნება მომეცით დავიწყებ იმის ახსნით, თუ რა არის მასონობა. რა არის მასონობა ქვისა არის განლაგების ტიპი, რომელიც პოპულარული გახდა Pinterest-ის მიერ წლების წინ. ის ქმნის შინაარსის დამოუკიდებელ ტრეკებს, რომლებშიც ნივთები თავს იყრიან რაც შეიძლება ახლოს ტრეკის დასაწყისთან.

ბევრი ადამიანი ხედავს მასონობას, როგორც შესანიშნავ ვარიანტს პორტფოლიოებისა და ფოტო გალერეებისთვის, რაც მას ნამდვილად შეუძლია. მაგრამ ქვისა უფრო მოქნილია, ვიდრე ის, რასაც ხედავთ Pinterest-ზე და ის არ შემოიფარგლება მხოლოდ ჩანჩქერის მსგავსი განლაგებით. მასონურ განლაგებაში:

ბილიკები შეიძლება იყოს სვეტები ან რიგები:

შინაარსის ჩანაწერები არ უნდა იყოს ერთი და იგივე ზომის:

ერთეულებს შეუძლიათ რამდენიმე ბილიკი მოიცავდეს:

ნივთები შეიძლება განთავსდეს კონკრეტულ ტრასებზე; მათ ყოველთვის არ უნდა დაიცვან განლაგების ავტომატური ალგორითმი:

დემოები აქ არის რამდენიმე მარტივი დემოსი, რომელიც გავაკეთე Chromium-ში CSS Masonry-ის მომავალი განხორციელების გამოყენებით. ფოტო გალერეის დემო ვერსია, რომელიც გვიჩვენებს, თუ როგორ შეიძლება მოიცავდეს ერთეულებს (ამ შემთხვევაში სათაური) მრავალ ტრეკზე:

კიდევ ერთი ფოტო გალერეა, სადაც ნაჩვენებია სხვადასხვა ზომის ტრეკები:

ახალი ამბების საიტის განლაგება ზოგიერთი ტრეკით უფრო ფართო ვიდრე სხვები და ზოგიერთი ელემენტი, რომელიც მოიცავს განლაგების მთელ სიგანეს:

კანბანის დაფა, რომელიც აჩვენებს, რომ ნივთები შეიძლება განთავსდეს კონკრეტულ ტრასებზე:

შენიშვნა:წინა დემოები გაკეთდა Chromium-ის ვერსიით, რომელიც ჯერ არ არის ხელმისაწვდომი ვებ მომხმარებლების უმეტესობისთვის, რადგან CSS Masonry მხოლოდ ახლა იწყებს დანერგვას ბრაუზერებში. თუმცა, ვებ დეველოპერები უკვე წლებია სიამოვნებით იყენებენ ბიბლიოთეკებს მასონური განლაგების შესაქმნელად. საიტები, რომლებიც იყენებენ მასონობას დღეს მართლაც, მასონობა დღეს საკმაოდ გავრცელებულია ინტერნეტში. აქ არის რამდენიმე მაგალითი, რომელიც აღმოვაჩინე Pinterest-ის გარდა:

და კიდევ რამდენიმე, ნაკლებად აშკარა მაგალითი:

მაშ, როგორ შეიქმნა ეს განლაგება? გამოსავალი ერთი ხრიკი, რომელიც მე დავინახე, არის Flexbox-ის განლაგების გამოყენება, მისი მიმართულების შეცვლა სვეტად და დაყენება შეფუთვაზე. ამ გზით, თქვენ შეგიძლიათ მოათავსოთ სხვადასხვა სიმაღლის ელემენტები მრავალ, დამოუკიდებელ სვეტებში, რაც ქმნის მასონური განლაგების შთაბეჭდილებას:

ამასთან, ამ გამოსავალთან არის ორი შეზღუდვა:

ნივთების თანმიმდევრობა განსხვავდება იმისგან, რაც იქნებოდა ნამდვილი მასონური განლაგებით. Flexbox-ით, ელემენტი ჯერ ავსებს პირველ სვეტს და როცა ის სავსეა, შემდეგ გადადით შემდეგ სვეტზე. ქვისა, ნივთები დაწყობილი იქნება იმ ტრასაში (ამ შემთხვევაში ან სვეტში) მეტი სივრცე აქვს. მაგრამ ასევე, და, ალბათ, უფრო მნიშვნელოვანი, ეს გამოსავალი მოითხოვს, რომ დააყენოთ ფიქსირებული სიმაღლე Flexbox კონტეინერისთვის; წინააღმდეგ შემთხვევაში, შეფუთვა არ მოხდებოდა.

მესამე მხარის მასონური ბიბლიოთეკები უფრო მოწინავე შემთხვევებისთვის, დეველოპერები იყენებდნენ ბიბლიოთეკებს. ამისათვის ყველაზე ცნობილ და პოპულარულ ბიბლიოთეკას უბრალოდ მასონური ჰქვია და NPM-ის მიხედვით კვირაში დაახლოებით 200000-ჯერ იტვირთება. Squarespace ასევე უზრუნველყოფს განლაგების კომპონენტს, რომელიც ასახავს მასონურ განლაგებას, კოდის გარეშე ალტერნატივისთვის და ბევრი საიტი იყენებს მას. ორივე ეს ვარიანტი იყენებს JavaScript კოდს განლაგებაში ელემენტების განსათავსებლად. ჩაშენებული ქვისა მე ნამდვილად აღფრთოვანებული ვარ, რომ მასონობა ახლა იწყებს ბრაუზერებში გამოჩენას, როგორც ჩაშენებული CSS ფუნქცია. დროთა განმავლობაში, თქვენ შეძლებთ გამოიყენოთ მასონური სისტემა, როგორც Grid ან Flexbox, ანუ რაიმე გამოსავლის ან მესამე მხარის კოდის საჭიროების გარეშე. ჩემი გუნდი Microsoft-ში ახორციელებს ჩაშენებულ მასონურ მხარდაჭერას Chromium-ის ღია კოდის პროექტში, რომელზეც დაფუძნებულია Edge, Chrome და მრავალი სხვა ბრაუზერი. Mozilla იყო ბრაუზერის პირველი გამყიდველი, რომელმაც შემოგვთავაზა Masonry-ის ექსპერიმენტული განხორციელება ჯერ კიდევ 2020 წელს. და Apple ასევე ძალიან დაინტერესებული იყო ამ ახალი ვებ განლაგების პრიმიტიული ქცევით. ფუნქციის სტანდარტიზაციის სამუშაოები ასევე წინ მიიწევს, CSS სამუშაო ჯგუფში შეთანხმებით ზოგადი მიმართულების შესახებ და კიდევ ახალი დისპლეის ტიპის ჩვენება: ქსელის ზოლები. თუ გსურთ გაიგოთ მეტი მასონობის შესახებ და თვალყური ადევნოთ პროგრესს, იხილეთ ჩემი CSS Masonry რესურსების გვერდი. დროთა განმავლობაში, როდესაც ქვისა გახდება საბაზისო ფუნქცია, ისევე როგორც Grid ან Flexbox, ჩვენ შევძლებთ უბრალოდ გამოვიყენოთ იგი და ვისარგებლოთ:

უკეთესი შესრულება, უკეთესი რეაგირება, გამოყენების სიმარტივე და უფრო მარტივი კოდი.

მოდით უფრო ახლოს მივხედოთ მათ. უკეთესი შესრულება საკუთარი მასონური განლაგების სისტემის შექმნა ან მესამე მხარის ბიბლიოთეკის გამოყენება ნიშნავს, რომ თქვენ მოგიწევთ JavaScript კოდის გაშვება ელემენტების ეკრანზე განთავსებისთვის. ეს ასევე ნიშნავს, რომ ეს კოდი იქნება დაბლოკილი. მართლაც, ან არაფერი გამოჩნდება, ან საგნები არ იქნება სწორ ადგილას ან სწორ ზომებში, სანამ JavaScript კოდი არ გაიშვება. ქვისა განლაგება ხშირად გამოიყენება ვებ გვერდის ძირითად ნაწილზე, რაც ნიშნავს, რომ კოდი აიძულებს თქვენს ძირითად შინაარსს უფრო გვიან გამოჩნდეს, ვიდრე სხვაგვარად გამოიყურებოდა, ამცირებს თქვენს LCP-ს, ან უდიდეს კონტენტულ საღებავის მეტრიკას, რომელიც დიდ როლს ასრულებს აღქმულ შესრულებასა და საძიებო სისტემის ოპტიმიზაციაში. მე გამოვცადე Masonry JS ბიბლიოთეკა მარტივი განლაგებით და DevTools-ში ნელი 4G კავშირის სიმულირებით. ბიბლიოთეკა არც თუ ისე დიდია (24KB, 7.8KB gzipped), მაგრამ ჩემი ტესტის პირობებში ჩატვირთვას დასჭირდა 600ms. აქ არის შესრულების ჩანაწერი, რომელიც აჩვენებს მასონური ბიბლიოთეკის დატვირთვის დიდ დროს 600 ms, და რომ სხვა რენდერის აქტივობა არ მომხდარა, სანამ ეს ხდებოდა:

გარდა ამისა, საწყისი ჩატვირთვის დროის შემდეგ, გადმოწერილი სკრიპტის გაანალიზება, კომპილაცია და გაშვება იყო საჭირო. ეს ყველაფერი, როგორც უკვე აღვნიშნეთ, ბლოკავდა გვერდის რენდერირებას. ბრაუზერში ჩაშენებული Masonry განხორციელებით, ჩვენ არ გვექნება სკრიპტი ჩატვირთვის და გასაშვებად. ბრაუზერის ძრავა მხოლოდ თავის საქმეს გააკეთებს გვერდის გადაცემის საწყის ეტაპზე. უკეთესი რეაგირება ისევე, როგორც გვერდის პირველად ჩატვირთვისას, ბრაუზერის ფანჯრის ზომის შეცვლა იწვევს ამ გვერდზე განლაგების ხელახლა გადმოცემას. თუმცა, ამ ეტაპზე, თუ გვერდი იყენებს Masonry JS ბიბლიოთეკას, არ არის საჭირო სკრიპტის ხელახლა ჩატვირთვა, რადგან ის უკვეაქ. თუმცა, კოდი, რომელიც ნივთებს სწორ ადგილებში გადააქვს, უნდა ამოქმედდეს. ახლა, როგორც ჩანს, ეს კონკრეტული ბიბლიოთეკა საკმაოდ სწრაფად აკეთებს ამას, როდესაც გვერდი იტვირთება. თუმცა, ის აცოცხლებს ელემენტებს, როდესაც მათ სჭირდებათ ფანჯრის ზომის შეცვლაზე სხვა ადგილას გადატანა და ეს დიდ განსხვავებას ქმნის. რა თქმა უნდა, მომხმარებლები არ ხარჯავენ დროს ბრაუზერის ფანჯრების ზომის შეცვლაში, როგორც ჩვენ დეველოპერები. მაგრამ ეს ანიმაციური ზომის შეცვლის გამოცდილება შეიძლება საკმაოდ დამღლელი იყოს და დასძენს აღქმულ დროს, რომელიც სჭირდება გვერდის ახალ ზომასთან ადაპტაციისთვის. გამოყენების სიმარტივე და უფრო მარტივი კოდი რამდენად მარტივია ვებ ფუნქციის გამოყენება და რამდენად მარტივია კოდის გარეგნობა, მნიშვნელოვანი ფაქტორებია, რამაც შეიძლება დიდი განსხვავება გამოიწვიოს თქვენი გუნდისთვის. რა თქმა უნდა, ისინი არ შეიძლება იყოს ისეთი მნიშვნელოვანი, როგორც მომხმარებლის საბოლოო გამოცდილება, მაგრამ დეველოპერის გამოცდილება გავლენას ახდენს შენარჩუნებაზე. ჩაშენებული ვებ ფუნქციის გამოყენებას აქვს მნიშვნელოვანი უპირატესობები ამ ფრონტზე:

დეველოპერები, რომლებმაც უკვე იციან HTML, CSS და JS, დიდი ალბათობით შეძლებენ ამ ფუნქციის მარტივად გამოყენებას, რადგან ის შექმნილია კარგად ინტეგრირებისთვის და შეესაბამებოდეს სხვა ვებ პლატფორმას. არ არსებობს ფუნქციის გამოყენების ცვლილებების დარღვევის რისკი. ამ ფუნქციის მოძველების ან შენარჩუნების თითქმის ნულოვანი რისკია.

ჩაშენებული მასონობის შემთხვევაში, რადგან ეს არის განლაგების პრიმიტიული, თქვენ იყენებთ მას CSS-დან, ისევე როგორც Grid ან Flexbox, JS არ არის ჩართული. ასევე, განლაგებასთან დაკავშირებული სხვა CSS თვისებები, როგორიცაა gap, მუშაობს ისე, როგორც თქვენ მოელით. არ არსებობს ხრიკები ან გამოსავალი, რომელთა შესახებაც უნდა იცოდეთ და ის, რასაც თქვენ ისწავლით, დოკუმენტირებულია MDN-ზე. Masonry JS lib-ისთვის, ინიციალიზაცია ცოტა რთულია: ის მოითხოვს მონაცემთა ატრიბუტს სპეციფიკური სინტაქსით, ფარული HTML ელემენტებთან ერთად სვეტების და ხარვეზების ზომის დასაყენებლად. გარდა ამისა, თუ გსურთ სვეტების დაფარვა, თქვენ თავად უნდა შეიყვანოთ ხარვეზის ზომა, რათა თავიდან აიცილოთ პრობლემები:

<სტილი> ტრეკ-სიზერი, .პუნქტი { სიგანე: 20%; } .gutter-sizer { სიგანე: 1რმ; } .პუნქტი { სიმაღლე: 100px; margin-block-end: 1rem; } .item:nth-child(კენტი) { სიმაღლე: 200px; } .item--width2 { სიგანე: calc(40% + 1rem); }

...

მოდით შევადაროთ ეს იმას, თუ როგორ გამოიყურება ჩაშენებული მასონური განხორციელება: <სტილი> .კონტეინერი { ჩვენება: ბადე-ზოლები; ბადე-ზოლები: გამეორება (4, 20%); უფსკრული: 1რემ; } .პუნქტი { სიმაღლე: 100px; } .item:nth-child(კენტი) { სიმაღლე: 200px; } .item--width2 { ბადე-სვეტი: span 2; }

...

უფრო მარტივი, უფრო კომპაქტური კოდი, რომელსაც შეუძლია უბრალოდ გამოიყენოს ისეთი რამ, როგორიცაა უფსკრული და სადაც ტრეკების დაფარვა ხდება 2-ით, ისევე როგორც ბადეში, და არ საჭიროებს თქვენგან სწორი სიგანის გამოთვლას, რომელიც მოიცავს უფსკრული ზომას. როგორ გავიგოთ რა არის ხელმისაწვდომი და როდის არის ხელმისაწვდომი? საერთო ჯამში, კითხვა ნამდვილად არ არის, უნდა გამოიყენოთ თუ არა ჩაშენებული ქვისა JS ბიბლიოთეკაზე, არამედ ის, თუ როდის. Masonry JS ბიბლიოთეკა საოცარია და მრავალი წლის განმავლობაში ავსებს ხარვეზს ვებ პლატფორმაში და მრავალი ბედნიერი დეველოპერისთვის და მომხმარებლისთვის. მას აქვს რამდენიმე ნაკლი, თუ შეადარებთ ჩაშენებულ მასონურ განხორციელებას, რა თქმა უნდა, მაგრამ ეს არ არის მნიშვნელოვანი, თუ ეს განხორციელება მზად არ არის. ჩემთვის ადვილია ამ მაგარი ახალი ვებ პლატფორმის მახასიათებლების ჩამოთვლა, რადგან მე ვმუშაობ ბრაუზერის გამყიდველში და ამიტომ, როგორც წესი, ვიცი, რა ხდება. მაგრამ დეველოპერები ხშირად აზიარებენ, გამოკითხვის შემდეგ, რომ ახალი ნივთების თვალყურის დევნება რთულია. ინფორმირებული ყოფნა რთულია და კომპანიები ყოველთვის პრიორიტეტს არ ანიჭებენ სწავლას. ამის დასახმარებლად, აქ არის რამდენიმე რესურსი, რომლებიც უზრუნველყოფენ განახლებებს მარტივი და კომპაქტური გზებით, რათა სწრაფად მიიღოთ თქვენთვის საჭირო ინფორმაცია:

ვებ პლატფორმას აქვს მკვლევარის საიტი: თქვენ შეიძლება დაინტერესდეთ მისი გამოშვების შენიშვნების გვერდით. და, თუ მოგწონთ RSS, შეამოწმეთ გამოშვების შენიშვნების არხი, ისევე როგორც საბაზისო ახლად ხელმისაწვდომი და ფართოდ ხელმისაწვდომი არხები.

ვებპლატფორმის სტატუსის დაფა: შეიძლება მოგეწონოთ მისი სხვადასხვა საბაზისო წლის გვერდები.

Chrome პლატფორმის სტატუსის საგზაო რუკის გვერდი.

თუ ცოტა მეტი დრო გაქვთ, შესაძლოა ასევე დაგაინტერესოთ ბრაუზერის მოვაჭრეების გამოშვების შენიშვნები:

Chrome ზღვარი Firefox Safari

კიდევ უფრო მეტი რესურსისთვის, იხილეთ ჩემი ნავიგაცია ვებ პლატფორმის ჩეტფურცელზე. ჩემი საქმე ჯერ კიდევ არ არის განხორციელებული ეს არის პრობლემის მეორე მხარე. მაშინაც კი, თუ თქვენ იპოვით დროს, ენერგიას და გზებს თვალყურის დევნებისთვის, მაინც იმედგაცრუებული გაქვთ თქვენი ხმის გაგონება და თქვენი საყვარელი ფუნქციების დანერგვა. შესაძლოა, წლების განმავლობაში ელოდეთ კონკრეტული ხარვეზის აღმოფხვრას, ან კონკრეტული ფუნქციის გაგზავნას ბრაუზერში, სადაც ის ჯერ კიდევ აკლია. მე ვიტყვი, რომ ბრაუზერის მოვაჭრეები უსმენენ. მე ვარ რამდენიმე ორგანიზაციათაშორისი გუნდის ნაწილი, სადაც მუდმივად განვიხილავთ დეველოპერის სიგნალებსა და გამოხმაურებებს. ჩვენ ვუყურებთ გამოხმაურების ბევრ სხვადასხვა წყაროს, როგორც შიდა, თითოეული ბრაუზერის მომწოდებლის, ასევე გარე/საჯარო ფორუმებზე, ღია კოდის პროექტებზე, ბლოგებსა და გამოკითხვებზე. და, ჩვენ ყოველთვის ვცდილობთ შევქმნათ უკეთესი გზები დეველოპერებისთვის, რომ გაიზიარონ თავიანთი კონკრეტული საჭიროებები და გამოყენების შემთხვევები. ასე რომ, თუ შეგიძლიათ, გთხოვთ, მოითხოვოთ მეტი ბრაუზერის მოვაჭრეებისგან და ზეწოლა მოახდინოთ ჩვენზე, რომ განვახორციელოთ თქვენთვის საჭირო ფუნქციები. მე მესმის, რომ ამას დრო სჭირდება და ასევე შეიძლება იყოს დამაშინებელი (რომ აღარაფერი ვთქვათ შესვლის მაღალ ბარიერზე), მაგრამ ის ასევე მუშაობს. აქ მოცემულია რამდენიმე გზა, რომლითაც შეგიძლიათ გაიგოთ თქვენი (ან თქვენი კომპანიის) ხმა: მიიღეთ ყოველწლიური გამოკითხვები JS-ის, CSS-ის მდგომარეობისა და HTML-ის მდგომარეობის შესახებ. ისინი დიდ როლს ასრულებენ იმაში, თუ როგორ აფასებენ ბრაუზერის გამყიდველები თავიანთ სამუშაოს. თუ გჭირდებათ კონკრეტული სტანდარტზე დაფუძნებული API, რომელიც უნდა განხორციელდეს თანმიმდევრულად ბრაუზერებში, განიხილეთ წინადადების წარდგენა Interop პროექტის მომდევნო გამეორებაზე. ამას მეტი დრო სჭირდება, მაგრამ გაითვალისწინეთ, როგორ გაუზიარეს Shopify-მა და RUMvision-მა Interop 2026-ის სურვილების სიები. მსგავსი დეტალური ინფორმაცია შეიძლება ძალიან სასარგებლო იყოს ბრაუზერის მოვაჭრეებისთვის პრიორიტეტების დასაყენებლად. ბრაუზერის მოვაჭრეებზე გავლენის მოხდენის უფრო სასარგებლო ბმულებისთვის, იხილეთ ჩემი ნავიგაცია ვებ პლატფორმის ჩეტფურცელზე. დასკვნა დასასრულს, ვიმედოვნებ, რომ ამ სტატიამ დაგიტოვათ რამდენიმე რამ, რომელზეც უნდა იფიქროთ:

მღელვარება ქვისა და სხვა მომავალი ვებ ფუნქციებისთვის. რამდენიმე ვებ მახასიათებელი, რომელთა გამოყენებაც გსურთ. მორგებული ან მესამე მხარის კოდის რამდენიმე ნაწილი, რომელთა ამოღება შესაძლებელია ჩაშენებული ფუნქციების სასარგებლოდ. რამდენიმე გზა თვალყური ადევნოთ იმას, რაც მოდის და გავლენა მოახდინოს ბრაუზერის მოვაჭრეებზე.

რაც მთავარია, იმედი მაქვს დაგარწმუნეთ ვებ პლატფორმის სრული პოტენციალის გამოყენების უპირატესობებში.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free