PHPackages                             ecailles/dom-class-name - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ecailles/dom-class-name

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ecailles/dom-class-name
=======================

A DOM class name generation library (BEM syntax class name builder etc.)

v1.0.0(10y ago)0658MITPHPPHP &gt;=5.5.0

Since Jan 30Pushed 9y ago1 watchersCompare

[ Source](https://github.com/ecailles/dom-class-name)[ Packagist](https://packagist.org/packages/ecailles/dom-class-name)[ Docs](https://github.com/ecailles/dom-class-name)[ RSS](/packages/ecailles-dom-class-name/feed)WikiDiscussions master Synced 4w ago

READMEChangelog (1)Dependencies (4)Versions (2)Used By (0)

DOM Class Name
==============

[](#dom-class-name)

[![Latest Stable Version](https://camo.githubusercontent.com/2d97ae5f5aa675dfd041ce804ba15ff922189f5e7edc70ea648270d9bc23e4bc/68747470733a2f2f706f7365722e707567782e6f72672f656361696c6c65732f646f6d2d636c6173732d6e616d652f762f737461626c65)](https://packagist.org/packages/ecailles/dom-class-name)[![Latest Unstable Version](https://camo.githubusercontent.com/4c1381c9feac0de5b06a62e82b208a1dac4e06893d739068a81aa57b046ab90a/68747470733a2f2f706f7365722e707567782e6f72672f656361696c6c65732f646f6d2d636c6173732d6e616d652f762f756e737461626c65)](https://packagist.org/packages/ecailles/dom-class-name)[![License](https://camo.githubusercontent.com/71a2d6349aafc6bf3be536504ad52d89596894d84b4c0813bfde2a1929a071b8/68747470733a2f2f706f7365722e707567782e6f72672f656361696c6c65732f646f6d2d636c6173732d6e616d652f6c6963656e7365)](https://packagist.org/packages/ecailles/dom-class-name)[![Build Status](https://camo.githubusercontent.com/964e039e9619762586889e99ce5316a4f435faad8c14296338baefc0800f3a13/68747470733a2f2f7472617669732d63692e6f72672f656361696c6c65732f646f6d2d636c6173732d6e616d652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/ecailles/dom-class-name)[![Coverage Status](https://camo.githubusercontent.com/e9376a61f805159ad20e40b759a2ba8e99cf966086bcb5681a056d41b7ad9d4f/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f656361696c6c65732f646f6d2d636c6173732d6e616d652f62616467652e7376673f6272616e63683d6d617374657226736572766963653d676974687562)](https://coveralls.io/github/ecailles/dom-class-name?branch=master)

Install via Composer
--------------------

[](#install-via-composer)

```
composer require ecailles/dom-class-name
```

Basic Usage
-----------

[](#basic-usage)

### Block

[](#block)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block--block-modifier'
$classname = (new Bem())
    ->block('block')->modifier('block-modifier')
    ->value();
```

### Element

[](#element)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block--block-modifier__element--element-modifier'
$classname = (new Bem())
    ->block('block')->modifier('block-modifier')
    ->element('element')->modifier('element-modifier')
    ->value();
```

### Classes

[](#classes)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block--block-modifier__element--element-modifier class1 class2'
$classname = (new Bem())
    ->block('block')->modifier('block-modifier')
    ->element('element')->modifier('element-modifier')
    ->class(['class1', 'class2'])
    ->value();
```

Return Value
------------

[](#return-value)

### Class names as array

[](#class-names-as-array)

```
use Ecailles\DomClassName\Bem\Bem;

// ['block--block-modifier__element--element-modifier', 'class1', 'class2']
$classnames = (new Bem())
    ->block('block')->modifier('block-modifier')
    ->element('element')->modifier('element-modifier')
    ->class(['class1', 'class2'])
    ->get();
```

### Class names as string

[](#class-names-as-string)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block--block-modifier__element--element-modifier class1 class2'
$classname = (new Bem())
    ->block('block')->modifier('block-modifier')
    ->element('element')->modifier('element-modifier')
    ->class(['class1', 'class2'])
    ->value();
```

### Class names as string (implicit type conversion)

[](#class-names-as-string-implicit-type-conversion)

```
use Ecailles\DomClassName\Bem\Bem;

$bem = (new Bem())->block('block')->class('class');

// 'block class'
echo htmlspecialchars($bem, ENT_QUOTES, 'UTF-8');
```

Explicit Modifiers
------------------

[](#explicit-modifiers)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block--block-modifier__element--element-modifier'
$classname = (new Bem())
    ->blockModifier('block-modifier')
    ->elementModifier('element-modifier')
    ->block('block')->element('element')
    ->value();
```

Cloning (PHP 5.6 or earlier are also supported)
-----------------------------------------------

[](#cloning-php-56-or-earlier-are-also-supported)

```
use Ecailles\DomClassName\Bem\Bem;

$block = (new Bem())->block('block');

// 'block__element1'
$element1 = $block->clone()->element('element1')->value();

// 'block__element2'
$element2 = $block->clone()->element('element2')->value();
```

Prefixing
---------

[](#prefixing)

```
use Ecailles\DomClassName\Bem\Bem;

// 'prefix-block'
$classname = (new Bem())->prefix('prefix')->block('block')->value();
```

or

```
use Ecailles\DomClassName\Bem\Bem;

// 'prefix-block'
$classname = (new Bem('prefix'))->block('block')->value();
```

Custom Separators
-----------------

[](#custom-separators)

### Prefix Separator

[](#prefix-separator)

```
use Ecailles\DomClassName\Bem\Bem;

// 'prefix__block'
$classname = (new Bem())->prefix('prefix')->prefixSeparator('__')
    ->block('block')->value();
```

or

```
use Ecailles\DomClassName\Bem\Bem;

// 'prefix__block'
$classname = (new Bem('prefix', '__'))->block('block')->value();
```

### Element Separator

[](#element-separator)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block-element'
$classname = (new Bem())->elementSeparator('-')
    ->block('block')->element('element')->value();
```

or

```
use Ecailles\DomClassName\Bem\Bem;

// 'block-element'
$classname = (new Bem(null, null, '-'))
    ->block('block')->element('element')->value();
```

### Modifier Separator

[](#modifier-separator)

```
use Ecailles\DomClassName\Bem\Bem;

// 'block-modifier'
$classname = (new Bem())->modifierSeparator('-')
    ->block('block')->element('modifier')->value();
```

or

```
use Ecailles\DomClassName\Bem\Bem;

// 'block-modifier'
$classname = (new Bem(null, null, null, '-'))
    ->block('block')->modifier('modifier')->value();
```

###  Health Score

28

—

LowBetter than 52% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 91.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3804d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1211058?v=4)[Whizark](/maintainers/whizark)[@whizark](https://github.com/whizark)

---

Top Contributors

[![whizark](https://avatars.githubusercontent.com/u/1211058?v=4)](https://github.com/whizark "whizark (55 commits)")[![iobot](https://avatars.githubusercontent.com/u/18593717?v=4)](https://github.com/iobot "iobot (5 commits)")

---

Tags

bemcsshtmlphpcsshtmldomBEM

###  Code Quality

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/ecailles-dom-class-name/health.svg)

```
[![Health](https://phpackages.com/badges/ecailles-dom-class-name/health.svg)](https://phpackages.com/packages/ecailles-dom-class-name)
```

###  Alternatives

[wa72/htmlpagedom

jQuery-inspired DOM manipulation extension for Symfony's Crawler

3384.0M34](/packages/wa72-htmlpagedom)[phpstrap/phpstrap

Bootstrap layout generator

1215.0k](/packages/phpstrap-phpstrap)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
