BEM მეთოდოლოგია
ცოდვა გამხელილი ჯობიაო - რამდენიმე წელი რაც ლეიაუთერად ვიმუშავე, არასოდეს გამომიყენებია რაიმე ტიპის მეთოლოგია, რომელიც საკუთარი კოდის ორგანიზებაში დამეხმარებოდა.
რეალობაში რაც ხდება ისაა რო საქმე დროზე უნდა გაკეთდეს და ექსპერიმენტების დრო ნაკლებად რჩება. სინამდვილეში კი ეს თავისმართლება უფროა და ის უპირატესობა რასაც ორგანიზებული კოდი მოგცემს, საბოლოო ჯამში დროის და რესურსების დაზოგვაა და არა პირიქით.
სანამ უშუალოდ მეთოდოლოგიებზე გადავალთ, მოდი ვიტყვი რატომაა კოდის ორგანიზების რაიმე მეთოდოლოგიის გამოყენება აუცილებელი:
როდესაც დავიწყე რეალური პროექტის აწყობა და BEM მეთოდოლოგიის მისადაგება, ვნახე რომ ბევრი რამ არ მომეწონა. გაჩნდა ბუნებრივია შეკითხვები და გადავწყვიტე მენახა რეალური საიტები, რომლებიც აღნიშნულ ტექნოლოგიას იყენებენ. ჩამონათვალში პირველივე ნიმუშს უცნაური აბრევიატურა - BEVM აქვს საიდანაც Envato-ს ჯგუფის ძალიან საინტერესო პოსტზე მოვხვდი, სადაც საუბარია, როგორ მოირგო ამ ჯგუფმა მეთოდოლოგია სათავისოთ ( Block Element Variation Modifaer). თუმცა ვისაც კითხვა გეზარებათ აქვეა ენვანტოს წარმომადგენლის, ჯორდან ლევისის ვიდეო ძალიან საინტერესო რესურსებითურთ: აქვე ერთი საინტერესო ვიდეო, რომელშიც მეთოდოლოგიის ძირითადი პრინციპების გარდა (1-დან მე-5 ვიდემოდე) საუბარია როგორ შეგვიძლია გამოვიყენოთ SASS მიქსინები ბემ კლასების აღსაწერად. ძალიან საინტერესო მიდგომა ვნახე ერთერთ საიტზე https://codefights.com/ რეალურად ეს არის BEM, ოღონდ მოდიფიკატორები პირდაპირ იწყება დეფიზით -modificators, ხოლო ელემენტებისთვისაც არ გამოიყენება სტანდარტული შეთანხმება __element, არამედ --element. აქვე საინტერესოა რომ -იწყება გლობალური კლასები, რომლებიც არც ერთ ბლოკს არ მიეკუთვნება (მაგ. -clearfix) რაც არ მომწონს ამ მიდგომაში ისაა რო რთული გასარკვევია კლასი ზოგადია და შესაძლოა ყველგან იქნას გამოყენებული თუ კონკრეტულ ბლოკს მიეკუთვნება. იმ მასალების გაცნობის შემდეგ, რომელიც პოსტში მოვიყვანე და იმ ამოცანების გათვალისწინებით რომელიც მაქვს გადასაწყვეტი, შემდეგ ფორმულირებაზე ჩამოვყალიბდე:
- კოდი არის იოლად გასაგები (შენთვის და სხვისთვის, ახლაც და მერეც)
- არის ოპტიმიზირებული (დუბლირების გარეშე. სწრაფად არენდერებს ბროუზერი)
- მოდულური არქიტექტურის გამო, კოდი არის იოლად გამოყენებადი სხვა პროექტებში.
- OOCSS
- SMACSS
- BEM (უფრო გასაგები getbem.com)
რა არის ბემი
როგორც ოფიციალურ საიტზე ვკითხულობთ:BEM (Block, Element, Modifier) არის კომპონენტური მიდგომა, რომლის ძირითადი იდეაა დაყოს ინტერფეისი დამოუკიდებელ ბლოკ-ელემენტებად, რაც აასწრაფებს და გაამარტივებს დეველოპმენტს, რთული UI -სთვისაც კი და საშუალებას მოგვცემს მრავალჯერ გამოვიყენოთ არსებული ელემენტები, კოდის დუბლირების გარეშე.კარგი იქნება, სანამ კითხვას გააგრძელებთ ბოლომდე თუ წაიკითხავთ BEM-ის ოფიციალურ დოკუმენტაციას. ბემის სრული ფილოსოფიის გასაგებად, შეგიძლიათ იმ გუნდის ერთერთ წევრს მოუსმინოთ რომელმაც ეს მეთოდოლოგია შეიმუშავა. თუმცა, მოდი დავუბრუნდეთ მოსაწყენ რეალობას. ის კონცეფცია რაზეც ვლადიმირი საუბრობს ვფიქრობ, რომ ძალიან შეზღუდულია და კონკრეტულ მოთხოვნებსაა მორგებული და ძალიან გაჭირდება მისი ადაპტირება სხვადასხვა ტექნოლოგიებთან მიმართებაში. თან მოდი აქვე ვთქვათ, რომ რეალურად უმეტესობა ჩვენგანს ალბათ მცირე მოცულობის პროექტები უფრო აინტერესებს.
როდესაც დავიწყე რეალური პროექტის აწყობა და BEM მეთოდოლოგიის მისადაგება, ვნახე რომ ბევრი რამ არ მომეწონა. გაჩნდა ბუნებრივია შეკითხვები და გადავწყვიტე მენახა რეალური საიტები, რომლებიც აღნიშნულ ტექნოლოგიას იყენებენ. ჩამონათვალში პირველივე ნიმუშს უცნაური აბრევიატურა - BEVM აქვს საიდანაც Envato-ს ჯგუფის ძალიან საინტერესო პოსტზე მოვხვდი, სადაც საუბარია, როგორ მოირგო ამ ჯგუფმა მეთოდოლოგია სათავისოთ ( Block Element Variation Modifaer). თუმცა ვისაც კითხვა გეზარებათ აქვეა ენვანტოს წარმომადგენლის, ჯორდან ლევისის ვიდეო ძალიან საინტერესო რესურსებითურთ: აქვე ერთი საინტერესო ვიდეო, რომელშიც მეთოდოლოგიის ძირითადი პრინციპების გარდა (1-დან მე-5 ვიდემოდე) საუბარია როგორ შეგვიძლია გამოვიყენოთ SASS მიქსინები ბემ კლასების აღსაწერად. ძალიან საინტერესო მიდგომა ვნახე ერთერთ საიტზე https://codefights.com/ რეალურად ეს არის BEM, ოღონდ მოდიფიკატორები პირდაპირ იწყება დეფიზით -modificators, ხოლო ელემენტებისთვისაც არ გამოიყენება სტანდარტული შეთანხმება __element, არამედ --element. აქვე საინტერესოა რომ -იწყება გლობალური კლასები, რომლებიც არც ერთ ბლოკს არ მიეკუთვნება (მაგ. -clearfix) რაც არ მომწონს ამ მიდგომაში ისაა რო რთული გასარკვევია კლასი ზოგადია და შესაძლოა ყველგან იქნას გამოყენებული თუ კონკრეტულ ბლოკს მიეკუთვნება. იმ მასალების გაცნობის შემდეგ, რომელიც პოსტში მოვიყვანე და იმ ამოცანების გათვალისწინებით რომელიც მაქვს გადასაწყვეტი, შემდეგ ფორმულირებაზე ჩამოვყალიბდე:
- უფლებას მივცემ საკუთარ თავს ავღწერო HTML Element სელექტორები, კლასის სელექტორის გარეშე (ანუ, პირდაპირ body {...} და არა მაგ. .body ან .page როგორც ბემის საიტზეა გამოყენებული)
- ელემენტებს გამოვყოფ ორი ქვედა ხაზით როგორც კლასიკურ BEM-შია მიღებული (Block__element)
- მოდიფიკატორებს წინ ჩამოვაშორებ ბლოკის და ელემენტის სახელს (ნაცვლად block__element--modifirer ავღწერ პირდაპირ --modifirer)
- და მექნება ზოგადი მოდიფიკატორები და თულები, რომლებიც დაიწყება ერთი ტირით (ნაცვლად მოდიფიკატორების ორისა): -hide, -justify-center
Comments
Post a Comment