What is ClassNames?

Is a tiny open-source library, originally created by JedWatson, a simple JavaScript utility for conditionally joining classNames together.

It is primarily meant for dealing with CSS classNames, very common in React and any other JSX-based UI framework, although you can use it for any kind of string concatenation.

License MIT

We take the stability and performance of this package seriously, because it is run millions of times a day in browsers all around the world. Updates are thoroughly reviewed for performance impacts before being released, and we have a comprehensive test suite.

Jed Watson


Popularity

The npm package classnames receives a total of 5,345,270 downloads a week.

data:image/png;base64,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w1FeXi5cHhYWhmPHjlndJjs7GwqFQuxSiYiIiKiLOD2EDhs2DCNGjBB+Pn36tNXPfn5+cHV1hUajAQBUVFSgqakJAQEBotdKRERERF3D6SHU0u7du3Ht2jXExsZaHZ84caLQJZ+dnQ2lUumM8oiIiIioi/SIEGo0GvHVV1+huLgYzz77LCQSidXlSqUSKpUKRqMRKpUK0dHRTqqUiIiIiLqCq7MLAIDt27fj559/thtAAdPkJD8/P6SlpUEmk8HHx8cJVRIRERFRV3F6S+iZM2dQWFiIxMREuwHULDo6Grt372ZXPBEREdEtwOktoZmZmbh06RKef/554djgwYPxyiuvWF0vMjISW7ZsQVRUlNglEhEREVEXczEajcZTp9QYM4ZLHhERERGROJzeHU9EREREtx+GUCIiIiISHUMoEREREYmOIZSIiIiIRMcQSkRERESiYwglIiIiItExhBIRERGR6BhCiYiIiEh0DKFEREREJDqGUCIiIiISHUMoEREREYmOIZSIiIiIRMcQSkRERESiYwglIiIiItH1iBCq1Wqxdu1aJCUlWR1PSUnBwoULUVlZaXW8trYWixYtQkpKiohVEhEREVFXcXoIvXr1Kv7+979j6NChdi/38vJCdna21bGcnBzI5XIxyiMiIiKibuD0EOri4oI//elPGDdunN3Lw8LCcOzYMatj2dnZUCgUYpRHRERERN3A6SG0X79+GDRoUKuX+/n5wdXVFRqNBgBQUVGBpqYmBAQEiFUiEREREXUxp4dQR0ycOFHoks/OzoZSqXRyRURERETUGb0ihCqVSqhUKhiNRqhUKkRHRzu7JCIiIiLqhF4RQr28vODn54e0tDTIZDL4+Pg4uyQiIiIi6oReEUIBIDo6Grt372ZXPBEREdEtwNXZBeTl5eHf//43jEYjmpubsXjxYvj7++O1116zul5kZCS2bNmCqKgoJ1VKRERERF3FxWg0Gk+dUmPMGC55RERERETi6DXd8URERER062AIJSIiIiLRMYQSERERkegYQomIiIhIdAyhRERERCQ6hlAiIiIiEh1DKBERERGJjiGUiIiIiETHEEpEREREomMIJSIiIiLRMYQSERERkegYQomIiIhIdAyhRERERCQ6hlAiIiIiEp2rswtoj7179+KHH37AtWvXMGHCBDz88MOQSCTOLouIiIiI2qnXtISq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+/dHQ0MDpk6dKgTa7777DllZWQCAiIiINu+nu9/fzAYMGICnn34aGzduhFwuR1NTE+644w7MmTPH6vIvvvgCUqkUffv2haura5tdvN39XmfZDfr4449j1apVws8PPPAAtmzZgtdff104R4888gj+v737j6qqzvc//mzOZXsZTjkcx4AUSJEUhetEWZT3kqwhnfyRkTMX8w7pGrKV0qT2NfWakiGZv5ZiRczNnKUyK7O5ZvM1bSW0NFYWI4n59Vf+wEJqzqG+HK5fNuOwWSe/f/D7NxhuM1+PtVgL9v7sffY+n/f+7Pf+7M/e/PznTW+Rufvuu9m3b1+bOrDjO//ggw84dOgQ3333HYMGDWLevHmNsdY6Ph588EHeeustli5dSlBQENXV1YwbN4677rrLtvho7oYbbsDj8XR6vu6sbqDj79hOp06dYvny5UDdXYjExERKSkpYv349NTU1jB49usUQlfbajIiICFu3+YfohkuXLl06duwU0dFDuy59HaqpqbH9dU6Xy7KsNg8yXQuupe+4QW9s8/79+zl37hy/+93vGqd99913VFdXt9uj9X305ndsmiZr165l9uzZLcbN/f3vf8fPz6/DpL67fD4f33333fdeT3d09X3//e9/x+Fw9Oi7663v+tKlS5imyU9/+tMr9tDClTj2qqur8ff377AdMk0Th8Pxvd5+YFdb5/P5qKmpafMGhAb/+Mc/evxapt74zht6aHsSFz6fj6qqKm666aZuf2+9GR8+n4/NmzczdOjQxrdU/NhcTr1c766ZntCr5VpKjux8h2Fvupa+4wa9sc1lZWVMmTKlxbSf/OQnvZ6AQu9+x6dOnWLs2LFtHtzo6ETdUw6Hw7ZGvKvv+3L2qbe+6xtuuOGKxEJzV+LY6+qVPr3xzli72jqHw9FpDFzOe0F74zu/nOOjYbxzT/RmfHzzzTe4XC7uueeeXlvnD42Sz55TT6iIiIiI2O7aum8rIiIiIj8KSkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVERETEdkpCRURERMR2SkJFRERExHZKQkVE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DbFiEJf8CJHmXjIXbqPwS5OqirPkrc5ijzWSlIeGQ9U+Vi/dSF7xedwVXiq+/Izt6avJt0aRmjy8/Y3pM5y569O4myNsmJdNsf6LglyukJHcHg6Ht2ax85iHqhoTd/E2sraX4Lx7XP2F0xCSHx0Jf13PoqyPOF1hUvXlQbJW78ITOYnfxqn37NoRTGLKKJylO3hh1T5Ouz2c3r2erHyL2x97pLHjRsRO9vSE1nzGO7tLsIC/5mTy1+bznGNZl7eQODzk7zyIGT6Fh6JbNWzmeSpMMN0eTKCdu/i9r88QUlbN49hjq8lZuJ7IrQuberPk+mJAaW4mT+Y0TAgkMjGNVxZMqh/TbFHh9mJZBp7mT5je9gjrMrwsWv06Tz/yOgDO8NHMWr+ApFuBigAo3cVzaW/Wr9cP14gEnsmex4TOejhDJpGx/ATT571NeuZwtqxKsOeYkB+ZIaSuXII3fT1rZv4HawAIICx+NuuWjGuMqZCkDFZWZZK56TlmbAfwI/juKaxcOlNvELnG9Lt/CSvd6aRvymTGO4ARxN2pGWRM0JAKuTpuuHTp0qVjx04RHT30am9Lp6rc5zGdYXpqXa4Siyq3B2+NgSskmBvbvFfMS6kbgm91tXMb3aLC7cE0XIT3a3v/vqbKg6fCwugXTIj+BY1cBTUVHjxV4AwJpl9HiWWNWTcGVHF67avx4nZbGJ3Vt4gNrpkkVERERER+PK7Oe0JFRERE5LqmJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERspyRURERERGynJFREREREbKckVERERERs9/8BNbmasv6+glAAAAAASUVORK5CYII=

Install

Install with npm, Bower, or Yarn:


# via npm
npm install classnames

# via Bower
bower install classnames

# or Yarn (note that it will automatically save the package to your `dependencies` in `package.json`)
yarn add classnames

Use with Node.js, Browserify, or webpack:


var classNames = require('classnames');
classNames('foo', 'bar'); // => 'foo bar'

Alternatively, you can simply include index.js on your page with a standalone script tag and it will export a global classNames method, or define the module if you are using RequireJS.

Usage

The classNames function takes any number of arguments which can be a string or object. The argument 'foo' is short for { foo: true }. If the value associated with a given key is falsy, that key won't be included in the output.


classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'

// lots of arguments of various types
classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'

// other falsy values are just ignored
classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'

Arrays will be recursively flattened as per the rules above:


var arr = ['b', { c: true, d: false }];
classNames('a', arr); // => 'a b c'

Dynamic class names with ES2015

If you're in an environment that supports computed keys (available in ES2015 and Babel) you can use dynamic class names:

let buttonType = 'primary';
classNames({ [`btn-${buttonType}`]: true });

Usage with React.js

This package is the official replacement for classSet, which was originally shipped in the React.js Addons bundle.

One of its primary use cases is to make dynamic and conditional className
props simpler to work with (especially more so than conditional string
manipulation). So where you may have the following code to generate a className prop for a button in React:


class Button extends React.Component {
  // ...
  render () {
    var btnClass = 'btn';
    if (this.state.isPressed) btnClass += ' btn-pressed';
    else if (this.state.isHovered) btnClass += ' btn-over';
    return <button className={btnClass}>{this.props.label}</button>;
  }
}

You can express the conditional classes more simply as an object:


var classNames = require('classnames');

class Button extends React.Component {
  // ...
  render () {
    var btnClass = classNames({
      btn: true,
      'btn-pressed': this.state.isPressed,
      'btn-over': !this.state.isPressed && this.state.isHovered
    });
    return <button className={btnClass}>{this.props.label}</button>;
  }
}

Because you can mix together object, array and string arguments, supporting optional className props is also simpler as only truthy arguments get included in the result:


var btnClass = classNames('btn', this.props.className, {
  'btn-pressed': this.state.isPressed,
  'btn-over': !this.state.isPressed && this.state.isHovered
});

Alternate dedupe version

There is an alternate version of classNames available which correctly dedupes classes and ensures that falsy classes specified in later arguments are excluded from the result set.

This version is slower (about 5x) so it is offered as an opt-in.

To use the dedupe version with Node.js, Browserify, or webpack:


var classNames = require('classnames/dedupe');

classNames('foo', 'foo', 'bar'); // => 'foo bar'
classNames('foo', { foo: false, bar: true }); // => 'bar'

For standalone (global / AMD) use, include dedupe.js in a tag on your page.

Alternate bind version (for css-modules)

If you are using css-modules, or a similar approach to abstract class “names" and the real className values that are actually output to the DOM, you may want to use the bind variant.

Note that in ES2015 environments, it may be better to use the “dynamic class names" approach documented above.


var classNames = require('classnames/bind');

var styles = {
  foo: 'abc',
  bar: 'def',
  baz: 'xyz'
};

var cx = classNames.bind(styles);

var className = cx('foo', ['bar'], { baz: true }); // => "abc def xyz"

Real-world example:


/* components/submit-button.js */
import { Component } from 'react';
import classNames from 'classnames/bind';
import styles from './submit-button.css';

let cx = classNames.bind(styles);

export default class SubmitButton extends Component {
  render () {
    let text = this.props.store.submissionInProgress ? 'Processing...' : 'Submit';
    let className = cx({
      base: true,
      inProgress: this.props.store.submissionInProgress,
      error: this.props.store.errorOccurred,
      disabled: this.props.form.valid,
    });
    return <button className={className}>{text};
  }
};

 See best JavaScript code snippets using ClassNames



Another popular package for this is clsx: https://www.npmjs.com/package/clsx


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *