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.
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>
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.
The post Generate JAN Barcodes with Pure CSS – Barcode.css appeared first on CSS Script.
Spoilers follow for Invincible Season 4, Episode 7, “Don’t Do Anything Rash,” which is available…
Crimson Desert has a high-profile fan: the director of The Witcher 3. Both games are…
Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…
Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…
Bungie has been sprinkling details of its massive patch 1.0.6 update for Marathon in the…
DC Studios has found its Maxima. Adria Arjona, who was on a shortlist of four…
This website uses cookies.