The benefits of BEM CSS
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

The benefits of BEM CSS

  • 252 views
Uploaded on

The pro's and con's of using BEM CSS, plus some semi sensical examples.

The pro's and con's of using BEM CSS, plus some semi sensical examples.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment

Views

Total Views
252
On Slideshare
219
From Embeds
33
Number of Embeds
2

Actions

Shares
Downloads
1
Comments
0
Likes
1

Embeds 33

https://twitter.com 32
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. The benefits of BEM CSS The benefits of BEM CSS - Bob Donderwinkel, 2014 1
  • 2. Who? • Bob Donderwinkel • Front-end Developer at Viewbook • Freelancer at bd creations The benefits of BEM CSS - Bob Donderwinkel, 2014 2
  • 3. Who? • Bob Donderwinkel • Front-end Developer at Viewbook Our hardheaded senior front-end developer, currently specialising in responsive HTML, CSS and mobile • Freelancer at bd creations The benefits of BEM CSS - Bob Donderwinkel, 2014 3
  • 4. Who? • Bob Donderwinkel • Front-end Developer at Viewbook Our hardheaded senior front-end developer, currently specialising in responsive HTML, CSS and mobile • Freelancer at bd creations Development with Eye for Design The benefits of BEM CSS - Bob Donderwinkel, 2014 4
  • 5. So what's the gist? • What is BEM? • What does BEM solve? • What have I used BEM for? • Some semi-interesting BEM tidbits The benefits of BEM CSS - Bob Donderwinkel, 2014 5
  • 6. So what's the gist? • What is BEM? • What does BEM solve? • What have I used BEM for? • Some semi-interesting BEM tidbits Mind you, I have been working with BEM CSS for about half a year now. The benefits of BEM CSS - Bob Donderwinkel, 2014 6
  • 7. So what is BEM? The benefits of BEM CSS - Bob Donderwinkel, 2014 7
  • 8. Block, Element, Modifier The benefits of BEM CSS - Bob Donderwinkel, 2014 8
  • 9. So what is BEM? You might just as well call it Module, Object, Modifier But then you could be saying something like I am using MOM Which would be weird. The benefits of BEM CSS - Bob Donderwinkel, 2014 9
  • 10. Unified semantic model for markup, styles, code and UX — Smashing Magazine The benefits of BEM CSS - Bob Donderwinkel, 2014 10
  • 11. What is BEM? • BEM originated at Yandex • BEM is a methodology, an abstract way of reasoning about your interface. • BEM captures purpose and meaning through it's CSS classname syntax. The benefits of BEM CSS - Bob Donderwinkel, 2014 11
  • 12. What is BEM? BEM is not just for CSS. It is about communicating between technologies and the people using them. • Design • Markup • Styles • Code The benefits of BEM CSS - Bob Donderwinkel, 2014 12
  • 13. Block, Elements and Modifiers What is that about? The benefits of BEM CSS - Bob Donderwinkel, 2014 13
  • 14. Block What is BEM? • An independent, reusable part of your interface. • Think: Headers, Menus, Images, etc • Can contain Elements and other Blocks. • Can contain one or more Modifiers <header class='b-header'> </header> The benefits of BEM CSS - Bob Donderwinkel, 2014 14
  • 15. Element What is BEM? • Belongs to a Block, only has meaning there • Can contain other Elements and Blocks. • Think: Header sub-title, Menu item, Image caption, etc • Can contain one or more Modifiers <header class='b-header'> <h1 class='b-header__title'></h1> <p class='b-header__description'></p> </header> The benefits of BEM CSS - Bob Donderwinkel, 2014 15
  • 16. Modifiers What is BEM? • Belongs on a Block or Element • Indicates a state different from the default • Think: themes, active/inactive state, aligning, etc • Can also be a key value pair <header class='b-header b-header_theme_awesome'> <h1 class='b-header__title b-header__title_large'></h1> <p class='b-header__description'></p> </header> The benefits of BEM CSS - Bob Donderwinkel, 2014 16
  • 17. Modifiers What is BEM? And Modifiers are nicely groupable using CSS preprocessors like SASS/LESS .b-header{ &_theme_awesome{ background-color: PapayaWhip; } &__title { &_large{ font-size: xx-large; } } } The benefits of BEM CSS - Bob Donderwinkel, 2014 17
  • 18. BEM CSS syntax What is BEM? The official syntax .b-[block-name] .b-[block-name]__[element] .b-[block-name]__[element]_[modifier] Pretty simple. - Use only Latin letters, dashes and digits. Not underscores (_) - Use underscores as the Block, Element and Modifier separators. The benefits of BEM CSS - Bob Donderwinkel, 2014 18
  • 19. BEM CSS syntax What is BEM? Is this okay? .b-[block-name]__[element]__[sub-element] .b-[block-name]_[modifier]__[element] I have seen some conflicting articles, but probably not. The benefits of BEM CSS - Bob Donderwinkel, 2014 19
  • 20. BEM CSS syntax What is BEM? Or roll your own syntax. Perhaps because that better suits the CSS code base of a project. In any case: • Be consistent • Keep the Block/Element/Modifier separators unique so you can use BEM automation tools. The benefits of BEM CSS - Bob Donderwinkel, 2014 20
  • 21. BEM CSS syntax So what is BEM? Most importantly, use meaningful BEM classnames. If you end up with something like this, it could pretty much defeat the point. .b-awesome-gizmo-three__teaser_latest The benefits of BEM CSS - Bob Donderwinkel, 2014 21
  • 22. What is BEM? BEM also touches on some well known Object Oriented Programming concepts. Don't Repeat Yourself (DRY) - Blocks are self contained and reusable. Seperation of Concerns - Using BEM CSS classes decouples your CSS from your HTML. The benefits of BEM CSS - Bob Donderwinkel, 2014 22
  • 23. What is BEM? BEM also touches on some well known Object Oriented Programming concepts. Single Responsibility Principle - Blocks, Element and Modifiers focus on managing just one thing, themselves. Open/Closed Principle - Modifiers often only extend on default styles and behaviour The benefits of BEM CSS - Bob Donderwinkel, 2014 23
  • 24. So what does BEM CSS solve? The benefits of BEM CSS - Bob Donderwinkel, 2014 24
  • 25. Chaos (Greek χάοςm khaos) the formless or void state preceding the creation of .. (*) — * = insert title of your awesome project here The benefits of BEM CSS - Bob Donderwinkel, 2014 25
  • 26. Seriously, what does using BEM CSS really help with? CSS can be wonderfully simple and easy to get started with. And even easier to mess up on the long run. Legacy CSS can be a royal pain. We have all been there, or have inherited these kind of projects to take care of. The benefits of BEM CSS - Bob Donderwinkel, 2014 26
  • 27. Seriously, what does using BEM CSS really help with? When projects scale, CSS often does not. CSS code is easy to append, overwrite or reinvent. That can turn in to a mess. It is a bit like growing a new haircut every month, but only trimming a piece of it. The benefits of BEM CSS - Bob Donderwinkel, 2014 27
  • 28. It is fun until you realise you can not walk away from it. The benefits of BEM CSS - Bob Donderwinkel, 2014 28
  • 29. So what does BEM CSS solve? BEM CSS gives you a default aproach for new projects. • Thinking in Blocks, Elements and Modifiers helps you figure out what your design is made of. • BEM helps you getting started coding CSS a little bit quicker through a standard syntax. • BEM is about communicating between technologies and the people using them. The benefits of BEM CSS - Bob Donderwinkel, 2014 29
  • 30. So what does BEM CSS solve? For example - Your design tells you what Blocks, Elements and Modifiers are present. - You can use these to scaffold up a rough prototype using HTML and CSS. - You review the prototype to see what behaviour is needed with Javascript. - The design is tweaked and the prototype is tuned. - Rinse and repeat. And you're done.. ..Well at least you have a better idea what your project needs to complete ;) The benefits of BEM CSS - Bob Donderwinkel, 2014 30
  • 31. Yes, yes.. Can you give me some pratical reasons to use BEM CSS The benefits of BEM CSS - Bob Donderwinkel, 2014 31
  • 32. Is there any practical stuff BEM CSS can help with? What does BEM solve Single CSS classname perks Better CSS performance • Rendering engines evaluate CSS selectors right to left. • The less they have to evaluate, the faster it renders. The benefits of BEM CSS - Bob Donderwinkel, 2014 32
  • 33. Is there any practical stuff BEM CSS can help with? What does BEM solve My view is that authors should not need to worry about optimizing selectors (and from what I see, they generally don’t), that should be the job of the engine. ~ Antti Koivisto Luckely CSS is the least of your performance worries today. The benefits of BEM CSS - Bob Donderwinkel, 2014 33
  • 34. Is there any practical stuff BEM CSS can help with? What does BEM solve Reduce hell in CSS specificty • Complex CSS selectors get a higher importance. You have to match up to this selector or use !important to override it. • Or find the actual CSS you want to change. But the bigger the CSS code base, the nastier that can get ;) Using single CSS classnames makes it easier to rework your existing CSS code base. The benefits of BEM CSS - Bob Donderwinkel, 2014 34
  • 35. Is there any practical stuff BEM CSS can help with? What does BEM solve Global CSS reset/normalize not needed (preferably) • Remember BEM Blocks should be independent and re-usable. A global CSS reset/normalize does not exactly fit that idea. Perhaps use something like uncss in your build process to get only the needed normalize/reset CSS into your Blocks and Elements. The benefits of BEM CSS - Bob Donderwinkel, 2014 35
  • 36. Is there any practical stuff BEM CSS can help with? What does BEM solve Better HTML/CSS decoupling • Using HTML element names in your CSS selectors forces you to update both when only one changes. • Using just single CSS BEM classnames makes them more portable to another HTML structure. The benefits of BEM CSS - Bob Donderwinkel, 2014 36
  • 37. Is there any practical stuff BEM CSS can help with? What does BEM solve Project automation through BEM's predictable CSS classnames • Yandex has tools if you are using the standard BEM syntax • CSS preprocessors like SASS and LESS are especially well suited for generating BEM CSS • And with build tools like Grunt or Gulp you can custom fit BEM CSS automation for your own project. The benefits of BEM CSS - Bob Donderwinkel, 2014 37
  • 38. But is it all utter BEM BLISS? The benefits of BEM CSS - Bob Donderwinkel, 2014 38
  • 39. Utter BEM BLISS? What about the CSS cascade? Yes, using just single CSS classnames can feel a bit too simplistic at times. But you can use regular CSS allong with your BEM CSS. Or you can use SASS or LESS to @include or @extend a CSS library. @import "my-themes"; &_theme_awesome{ @include theme-more-awesome(); } The benefits of BEM CSS - Bob Donderwinkel, 2014 39
  • 40. Utter BEM BLISS? But I hate looking at long and ugly-ish CSS classnames • True.. no way around that. BEM CSS can be a tad challenging for the aesthetically inclinded code fashionista. • But luckely the visitor of website or application will not look in the source all too often ;) Doesn't HTML filesize bloat with long CSS classnames? • Yes, true. But minification and gzipping go a long way. The benefits of BEM CSS - Bob Donderwinkel, 2014 40
  • 41. Utter BEM CSS BLISS? And is BEM only useful in larger teams? • BEM CSS certainly has extra perks in larger teams because of the meaningful BEM CSS classnames. • But working solo you can also use the Block, Element and Modifier approach on a design to get started prototyping sooner. The benefits of BEM CSS - Bob Donderwinkel, 2014 41
  • 42. Utter BEM CSS BLISS? Is BEM not yet another 'framework/methodology/ whatever' to try and get my head around? • Yes, but it's concept and syntax is pretty straight forward to get started with and use. • And BEM can play pretty nicely with other CSS approaches out there. The benefits of BEM CSS - Bob Donderwinkel, 2014 42
  • 43. Utter BEM BLISS? Other CSS approaches Object Oriented CSS • Separation of Structure from Skin • Separation of Containers and Content In essence OOCSS is about keeping CSS modular so it can be reused and extended. This is similar to the Block, Element and Modifier approach. The benefits of BEM CSS - Bob Donderwinkel, 2014 43
  • 44. Utter BEM BLISS? Other CSS approaches Scalable and Modular Architecture for CSS • Guidelines how you can write and organize your CSS SMACCS has five types of CSS categories Base, Layout, Module, State, Theme. The Module and State categories are simular analogue for the Block, Element and Modifier approach. The benefits of BEM CSS - Bob Donderwinkel, 2014 44
  • 45. Utter BEM BLISS? Other CSS approaches Web components - Polymer and Brick Web Components are a collection of web standards focussed on delivering self-contained and reusable custom blocks of HTML, Javascript & CSS. BEM CSS can be used 'inside' a Web Component just like in any other project, and with roughly the same benefits. The benefits of BEM CSS - Bob Donderwinkel, 2014 45
  • 46. Do you have some interesting BEM CSS tidbits? The benefits of BEM CSS - Bob Donderwinkel, 2014 46
  • 47. Multi modifer CSS classes BEM tidbits Multi modifer CSS classes - Some Gulp.js which will rework a bit of BEM CSS so you can use multiple Modifiers in a single BEM class __block__element_theme-light_size-large Wow, even longer CSS classnames...! The benefits of BEM CSS - Bob Donderwinkel, 2014 47
  • 48. Multi modifer CSS classes BEM tidbits @bobdonderwinkel we suggest to use classic approach and write as many classes as needed in DOM tree @bobdonderwinkel and avoid copypaste with the help of template engines — Twitter #b_ Yeah, perhaps not that great an idea afterall. Fun experiment though. The benefits of BEM CSS - Bob Donderwinkel, 2014 48
  • 49. kaBEM BEM tidbits BEM CSS scaffolding on some steroids kaBEM is a grunt.js environment for quick scaffolding and tweaking of HTML with BEM CSS (Block, Element, Modifier). - See a BEM classname in your CSS and know where to use it in your HTML - See a BEM classname in your HTML and know where to find it in your CSS files - See a BEM classname and know which purpose it has But.. Disclaimer The benefits of BEM CSS - Bob Donderwinkel, 2014 49
  • 50. kaBEM BEM tidbits Disclaimer: I created kaBEM just starting with BEM CSS. So be mindful of some little hickups that trickeled in. For example kaBEM uses multi element/modifier BEM CSS classnames. .b-block__element-1__element-2 .b-block__element_modifiers-1_modifier-2 In hindsight these are a bit of a BEM CSS no-no ;) But no worries, a new version is on the way. The benefits of BEM CSS - Bob Donderwinkel, 2014 50
  • 51. BEM User Stories BEM tidbits User stories seem like a nice way to get going with BEM even before you get busy with a design or prototype. • Sum up what parts should be present (Blocks and Elements) • Describe how these parts should look & behave (Modifiers) • Translate these User Stories in BEM CSS classnames • Get some coffee and start coding The benefits of BEM CSS - Bob Donderwinkel, 2014 51
  • 52. Okay, round up already The benefits of BEM CSS - Bob Donderwinkel, 2014 52
  • 53. Rounding up • Thinking in Block, Elements and Modifiers helps you interpretate a design quicker and get you started coding sooner. • BEM CSS classnames are about communicating, keep them meaningful. • BEM CSS classnames are well suited for automation because of it's default syntax. The benefits of BEM CSS - Bob Donderwinkel, 2014 53
  • 54. Good reads Rounding up • Scaling Down The BEM Methodology For Small Projects • MindBEMding – getting your head ’round BEM syntax • Organizing CSS: OOCSS, SMACSS, and BEM • Generating BEM selectors with CSS preprocessors The benefits of BEM CSS - Bob Donderwinkel, 2014 54
  • 55. Contact me! Rounding up • www.bdcreations.nl • b.donderwinkel@bdcreations.nl • Twitter • Linkedin The benefits of BEM CSS - Bob Donderwinkel, 2014 55