npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

b-e-m

v1.0.1

Published

Typographically pleasing syntax for BEM

Downloads

13

Readme

B-E-M

Typographically pleasing syntax for BEM

Basic education manual

In case you haven't heard about it, BEM is the CSS structuring methodology du jour according to thought-leaders in front-end architecture.

/* Block component */
.article {}

/* Element that depends upon the block */ 
.article—header {}

/* Modifier that changes the style of the block */
.article--new {} 

/* Modifier that changes the style of the element */
.article__header--large {}

BEM is straightforward, scalable and easy to parse for both humans and grep alike.

Unfortunately it has one major flaw, and until that hasn't been solved, we won't possibly be able to use this promising technique in production.

Double underscores got me like

It just doesn't look that nice.

Everybody knows that the success of a coding convention depends hugely on how elegant the syntax looks. I mean, look at arrow functions. Why can't we have some of those in CSS?

Any self-respecting web-designer will tell you that writing code which doesn't conform with their personal aesthetic preferences is simply not an option.

No mountain too high for overengineering

There are already fairly successful attempts at solving this problem with preprocessors like Sass. By abstracting those conventions into tidy mixins we will hopefully never have to see them again. Who reads compiled code anyways?

Still this doesn't save us from using these class names in our HTML. That's why I built this simple node module that you can easily add to your build chain.

A dashing solution

To stop the eyesore caused by duplicate punctuation characters, the B-E-M convention replaces the double underscores and hyphens of BEM with a single em dash (—) or en dash (–) respectively.

Our example from above in B-E-M syntax would look as follows:

/* Block component */
.article {}

/* Element that depends upon the block */ 
.article—header {}

/* Modifier that changes the style of the block */
.article–new {} 

/* Modifier that changes the style of the element */
.article—header–large {}

Notice how the code looks much cleaner now.

How to use

Simply install the package with npm i --save-dev b-e-m.

Then use the module in your project.

var bEM = require('b-e-m');

// .article__header--large {}
console.log(bEM('.article—header–large {}'));

How to contribute

Please don't.