Bem
#
BEMدر واقع BEM
از 3 واژه Block
و Element
و Modifier
تشکیل شده است.
Block
: یعنی باید هدف کلاس تعریف شده را توصیف کند، مثلmenu.
یک Block نباید محیط اطرافش را تحت تأثیر قرار دهد. یعنی نباید margin یا position به خصوصی داشته باشد.
همچنین وقتی که از روش BEM استفاده میکنید، نباید از تگها و ID عناصر در CSS استفاده کنید، بلکه فقط استفاده از کلاس مجاز است.
این موارد، استقلال مورد نیاز Block را برای استفادهی مجدد یا جابجایی آن به هر قسمتی از پروژه، تضمین میکند.
🎉 بلاک ها دارای 3 ویژگی 1. تورفتگی ( Nesting ) و 2. جاگیری دلخواه ( Arbitrary placement ) و 3. استفادهی مجدد (Re-use) می باشد که اولی یعنی هر بلاک از چند بخش تشکیل شود و هر بخش استایل خاص خودش را داشته باشد:
و دومی نیز یعنی میتوان این بلاک ها را جابه جا کرد
و سومی هم یعنی قابلیت استفاده دوباره را دارند.
Element
: قسمتی ازBlock
می باشد که مستقل قابل استفاده نیست.
برای مثال آیتمهای یک منو خارج از فضای اصلی آن استفاده نمیشوند بنابراین هر آیتم یک عنصر است.
element
نیز مانند block
باید هدف را توصیف کند، نه شکل ظاهری را و ساختار نام کامل یک عنصر به صورت block-name__element-name
می باشد.
🎉 نام عنصر توسط 2 عدد underscore(__)
مشخص می شود.
همچنین element
نیز دارای ویژگی هایی می باشد که اول تورفتگی است و می توان عناصر را به صورت تورتگی استفاده کرد:
که حالت دوم اشتباه می باشد.
دوم عضویت می باشد و یعنی یک عنصر باید همیشه عضو یک بلاک باشد و مجزا از بلاک نباشد.
سوم اختیاری بودن یک عنصر است که یعنی یک بلاک می تواند عنصری نداشته باشد.
Modifier
: در واقع ماهیتیست که ظاهر، حالت و رفتار یک بلاک یا عنصر را مشخص می کند.
نام modifier
میتواند بیانگر هر یک از موارد زیر باشد:
- شکل ظاهری آن، مثلا این که چه اندازهای دارد (size_s)
- حالت آن، مثلا این که چه تفاوتی دارد (disabled یا focused)
- رفتار آن، مثلا این که چه واکنشی نشان میدهد (directions_left-top)
نام پیراینده توسط یک underscore ( _ ) از بلاک یا عنصر جدا میشود.
در واقع ما 2 حالت استفاده از modifier
داریم که
اولی 1. نوع Boolean
می باشد
و دومی 2. نوع key-value
می باشد:
🎉 یک modifier
هیچوقت به تنهایی قابل استفاده نیست