Categories: CSSScriptWeb Design

Generate JAN Barcodes with Pure CSS – Barcode.css

barcode-css a lightweight CSS library that generates JAN (EAN-13) barcodes without a single line of JavaScript.

It creates functional HTML barcodes through an interactive radio button matrix, where selecting digits automatically updates the barcode visualization in real-time using CSS selectors and pseudo-elements.

How to use it:

1. Download the barcode.css file and load it into your document:

<link rel="stylesheet" href="barcode.css">

2. Create the Barcode HTML. This structure is a series of divs that the CSS will target to create the black and white bars.

<div id="barcode">
  <div class="left-margin">
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
  </div>
  <div class="left-guardbar">
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
  </div>
  <div class="left-databar">
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
  </div>
  <div class="center-bar">
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
  </div>
  <div class="right-databar">
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
    <div class="datachar">
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
      <div class="bar"></div>
    </div>
  </div>
  <div class="right-guardbar">
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
  </div>
  <div class="right-margin">
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
  </div>
  <div class="digits">
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
    <div class="digit"></div>
  </div>
</div>

3. The barcode is controlled by a matrix of 12 rows of radio buttons, one for each of the first 12 digits. Selecting a radio button updates the barcode instantly.

<div class="digit-inputs">
  <div class="digit00"><input type="radio" id="input00-0" name="input00" value="0" checked="checked"/><label for="input00-0">0</label><input type="radio" id="input00-1" name="input00" value="1"/><label for="input00-1">1</label><input type="radio" id="input00-2" name="input00" value="2"/><label for="input00-2">2</label><input type="radio" id="input00-3" name="input00" value="3"/><label for="input00-3">3</label><input type="radio" id="input00-4" name="input00" value="4"/><label for="input00-4">4</label><input type="radio" id="input00-5" name="input00" value="5"/><label for="input00-5">5</label><input type="radio" id="input00-6" name="input00" value="6"/><label for="input00-6">6</label><input type="radio" id="input00-7" name="input00" value="7"/><label for="input00-7">7</label><input type="radio" id="input00-8" name="input00" value="8"/><label for="input00-8">8</label><input type="radio" id="input00-9" name="input00" value="9"/><label for="input00-9">9</label></div>
  <div class="digit01"><input type="radio" id="input01-0" name="input01" value="0" checked="checked"/><label for="input01-0">0</label><input type="radio" id="input01-1" name="input01" value="1"/><label for="input01-1">1</label><input type="radio" id="input01-2" name="input01" value="2"/><label for="input01-2">2</label><input type="radio" id="input01-3" name="input01" value="3"/><label for="input01-3">3</label><input type="radio" id="input01-4" name="input01" value="4"/><label for="input01-4">4</label><input type="radio" id="input01-5" name="input01" value="5"/><label for="input01-5">5</label><input type="radio" id="input01-6" name="input01" value="6"/><label for="input01-6">6</label><input type="radio" id="input01-7" name="input01" value="7"/><label for="input01-7">7</label><input type="radio" id="input01-8" name="input01" value="8"/><label for="input01-8">8</label><input type="radio" id="input01-9" name="input01" value="9"/><label for="input01-9">9</label></div>
  <div class="digit02"><input type="radio" id="input02-0" name="input02" value="0" checked="checked"/><label for="input02-0">0</label><input type="radio" id="input02-1" name="input02" value="1"/><label for="input02-1">1</label><input type="radio" id="input02-2" name="input02" value="2"/><label for="input02-2">2</label><input type="radio" id="input02-3" name="input02" value="3"/><label for="input02-3">3</label><input type="radio" id="input02-4" name="input02" value="4"/><label for="input02-4">4</label><input type="radio" id="input02-5" name="input02" value="5"/><label for="input02-5">5</label><input type="radio" id="input02-6" name="input02" value="6"/><label for="input02-6">6</label><input type="radio" id="input02-7" name="input02" value="7"/><label for="input02-7">7</label><input type="radio" id="input02-8" name="input02" value="8"/><label for="input02-8">8</label><input type="radio" id="input02-9" name="input02" value="9"/><label for="input02-9">9</label></div>
  <div class="digit03"><input type="radio" id="input03-0" name="input03" value="0" checked="checked"/><label for="input03-0">0</label><input type="radio" id="input03-1" name="input03" value="1"/><label for="input03-1">1</label><input type="radio" id="input03-2" name="input03" value="2"/><label for="input03-2">2</label><input type="radio" id="input03-3" name="input03" value="3"/><label for="input03-3">3</label><input type="radio" id="input03-4" name="input03" value="4"/><label for="input03-4">4</label><input type="radio" id="input03-5" name="input03" value="5"/><label for="input03-5">5</label><input type="radio" id="input03-6" name="input03" value="6"/><label for="input03-6">6</label><input type="radio" id="input03-7" name="input03" value="7"/><label for="input03-7">7</label><input type="radio" id="input03-8" name="input03" value="8"/><label for="input03-8">8</label><input type="radio" id="input03-9" name="input03" value="9"/><label for="input03-9">9</label></div>
  <div class="digit04"><input type="radio" id="input04-0" name="input04" value="0" checked="checked"/><label for="input04-0">0</label><input type="radio" id="input04-1" name="input04" value="1"/><label for="input04-1">1</label><input type="radio" id="input04-2" name="input04" value="2"/><label for="input04-2">2</label><input type="radio" id="input04-3" name="input04" value="3"/><label for="input04-3">3</label><input type="radio" id="input04-4" name="input04" value="4"/><label for="input04-4">4</label><input type="radio" id="input04-5" name="input04" value="5"/><label for="input04-5">5</label><input type="radio" id="input04-6" name="input04" value="6"/><label for="input04-6">6</label><input type="radio" id="input04-7" name="input04" value="7"/><label for="input04-7">7</label><input type="radio" id="input04-8" name="input04" value="8"/><label for="input04-8">8</label><input type="radio" id="input04-9" name="input04" value="9"/><label for="input04-9">9</label></div>
  <div class="digit05"><input type="radio" id="input05-0" name="input05" value="0" checked="checked"/><label for="input05-0">0</label><input type="radio" id="input05-1" name="input05" value="1"/><label for="input05-1">1</label><input type="radio" id="input05-2" name="input05" value="2"/><label for="input05-2">2</label><input type="radio" id="input05-3" name="input05" value="3"/><label for="input05-3">3</label><input type="radio" id="input05-4" name="input05" value="4"/><label for="input05-4">4</label><input type="radio" id="input05-5" name="input05" value="5"/><label for="input05-5">5</label><input type="radio" id="input05-6" name="input05" value="6"/><label for="input05-6">6</label><input type="radio" id="input05-7" name="input05" value="7"/><label for="input05-7">7</label><input type="radio" id="input05-8" name="input05" value="8"/><label for="input05-8">8</label><input type="radio" id="input05-9" name="input05" value="9"/><label for="input05-9">9</label></div>
  <div class="digit06"><input type="radio" id="input06-0" name="input06" value="0" checked="checked"/><label for="input06-0">0</label><input type="radio" id="input06-1" name="input06" value="1"/><label for="input06-1">1</label><input type="radio" id="input06-2" name="input06" value="2"/><label for="input06-2">2</label><input type="radio" id="input06-3" name="input06" value="3"/><label for="input06-3">3</label><input type="radio" id="input06-4" name="input06" value="4"/><label for="input06-4">4</label><input type="radio" id="input06-5" name="input06" value="5"/><label for="input06-5">5</label><input type="radio" id="input06-6" name="input06" value="6"/><label for="input06-6">6</label><input type="radio" id="input06-7" name="input06" value="7"/><label for="input06-7">7</label><input type="radio" id="input06-8" name="input06" value="8"/><label for="input06-8">8</label><input type="radio" id="input06-9" name="input06" value="9"/><label for="input06-9">9</label></div>
  <div class="digit07"><input type="radio" id="input07-0" name="input07" value="0" checked="checked"/><label for="input07-0">0</label><input type="radio" id="input07-1" name="input07" value="1"/><label for="input07-1">1</label><input type="radio" id="input07-2" name="input07" value="2"/><label for="input07-2">2</label><input type="radio" id="input07-3" name="input07" value="3"/><label for="input07-3">3</label><input type="radio" id="input07-4" name="input07" value="4"/><label for="input07-4">4</label><input type="radio" id="input07-5" name="input07" value="5"/><label for="input07-5">5</label><input type="radio" id="input07-6" name="input07" value="6"/><label for="input07-6">6</label><input type="radio" id="input07-7" name="input07" value="7"/><label for="input07-7">7</label><input type="radio" id="input07-8" name="input07" value="8"/><label for="input07-8">8</label><input type="radio" id="input07-9" name="input07" value="9"/><label for="input07-9">9</label></div>
  <div class="digit08"><input type="radio" id="input08-0" name="input08" value="0" checked="checked"/><label for="input08-0">0</label><input type="radio" id="input08-1" name="input08" value="1"/><label for="input08-1">1</label><input type="radio" id="input08-2" name="input08" value="2"/><label for="input08-2">2</label><input type="radio" id="input08-3" name="input08" value="3"/><label for="input08-3">3</label><input type="radio" id="input08-4" name="input08" value="4"/><label for="input08-4">4</label><input type="radio" id="input08-5" name="input08" value="5"/><label for="input08-5">5</label><input type="radio" id="input08-6" name="input08" value="6"/><label for="input08-6">6</label><input type="radio" id="input08-7" name="input08" value="7"/><label for="input08-7">7</label><input type="radio" id="input08-8" name="input08" value="8"/><label for="input08-8">8</label><input type="radio" id="input08-9" name="input08" value="9"/><label for="input08-9">9</label></div>
  <div class="digit09"><input type="radio" id="input09-0" name="input09" value="0" checked="checked"/><label for="input09-0">0</label><input type="radio" id="input09-1" name="input09" value="1"/><label for="input09-1">1</label><input type="radio" id="input09-2" name="input09" value="2"/><label for="input09-2">2</label><input type="radio" id="input09-3" name="input09" value="3"/><label for="input09-3">3</label><input type="radio" id="input09-4" name="input09" value="4"/><label for="input09-4">4</label><input type="radio" id="input09-5" name="input09" value="5"/><label for="input09-5">5</label><input type="radio" id="input09-6" name="input09" value="6"/><label for="input09-6">6</label><input type="radio" id="input09-7" name="input09" value="7"/><label for="input09-7">7</label><input type="radio" id="input09-8" name="input09" value="8"/><label for="input09-8">8</label><input type="radio" id="input09-9" name="input09" value="9"/><label for="input09-9">9</label></div>
  <div class="digit10"><input type="radio" id="input10-0" name="input10" value="0" checked="checked"/><label for="input10-0">0</label><input type="radio" id="input10-1" name="input10" value="1"/><label for="input10-1">1</label><input type="radio" id="input10-2" name="input10" value="2"/><label for="input10-2">2</label><input type="radio" id="input10-3" name="input10" value="3"/><label for="input10-3">3</label><input type="radio" id="input10-4" name="input10" value="4"/><label for="input10-4">4</label><input type="radio" id="input10-5" name="input10" value="5"/><label for="input10-5">5</label><input type="radio" id="input10-6" name="input10" value="6"/><label for="input10-6">6</label><input type="radio" id="input10-7" name="input10" value="7"/><label for="input10-7">7</label><input type="radio" id="input10-8" name="input10" value="8"/><label for="input10-8">8</label><input type="radio" id="input10-9" name="input10" value="9"/><label for="input10-9">9</label></div>
  <div class="digit11"><input type="radio" id="input11-0" name="input11" value="0" checked="checked"/><label for="input11-0">0</label><input type="radio" id="input11-1" name="input11" value="1"/><label for="input11-1">1</label><input type="radio" id="input11-2" name="input11" value="2"/><label for="input11-2">2</label><input type="radio" id="input11-3" name="input11" value="3"/><label for="input11-3">3</label><input type="radio" id="input11-4" name="input11" value="4"/><label for="input11-4">4</label><input type="radio" id="input11-5" name="input11" value="5"/><label for="input11-5">5</label><input type="radio" id="input11-6" name="input11" value="6"/><label for="input11-6">6</label><input type="radio" id="input11-7" name="input11" value="7"/><label for="input11-7">7</label><input type="radio" id="input11-8" name="input11" value="8"/><label for="input11-8">8</label><input type="radio" id="input11-9" name="input11" value="9"/><label for="input11-9">9</label></div>
</div>

How it works:

When you check an input, a CSS rule like this is triggered: :root:has(.digit01 input[value="5"]:checked) { --d01: 5; }. This rule uses the :has() pseudo-class to detect which input is checked within a specific container and then sets a global CSS variable (--d01) to that value. This is the fundamental input mechanism.

From there, the library performs the EAN-13 check digit calculation entirely within CSS. It sums the odd and even-positioned digits using calc(), applies the *3 multiplier, and finds the final check digit with the mod() function—all stored in another CSS variable (--d12). I’ve rarely seen CSS used for this kind of mathematical logic.

The most complex part is the encoding of each digit into a 7-module pattern of black and white bars. The CSS contains massive calc() functions that effectively simulate boolean logic. A multiplication (var(--a) * var(--b)) acts as an AND gate, while a formula like calc(1 - (1 - var(--a)) * (1 - var(--b))) simulates an OR gate. These logical chains determine whether each of the seven bars for a digit should be black (1) or white (0).

Finally, the background color of each bar div is set with background: rgb(calc(255 * (1 - var(--rX))), ...) where --rX is the computed 0 or 1. The numeric digits displayed below the barcode are also rendered with CSS, using the counter-reset and content properties to display the values of the --d00 to --d12 variables.

Related Resources:

The post Generate JAN Barcodes with Pure CSS – Barcode.css appeared first on CSS Script.

rssfeeds-admin

Share
Published by
rssfeeds-admin

Recent Posts

Invincible Season 4, Episode 7 Review – ‘Don’t Do Anything Rash’

Spoilers follow for Invincible Season 4, Episode 7, “Don’t Do Anything Rash,” which is available…

17 minutes ago

Crimson Desert Praised

Crimson Desert has a high-profile fan: the director of The Witcher 3. Both games are…

17 minutes ago

Marathon Patch 1.0.6 Update Pushes Players to Be Nice and Brings Big Gameplay Changes – Everything You Need to Know

Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…

17 minutes ago

Marathon Patch 1.0.6 Update Pushes Players to Play Nice and Brings Big Changes to Shells, Weapons, and More

Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…

1 hour ago

Marathon Patch 1.0.6 Update Pushes Players to Play Nice and Brings Big Changes to Shells, Weapons, and More

Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…

1 hour ago

Man of Tomorrow Maxima Casting Confirmed

DC Studios has found its Maxima. Adria Arjona, who was on a shortlist of four…

1 hour ago

This website uses cookies.