---
title: Wallpaper Calculator + Request for required amount of wallpaper
description: Wallpaper calculator for estimating requirements and a form for calculating exact requirements
---

[Skip to content](https://support.meinewand.com/en/request-for-required-amount-of-wallpaper#main-content)

- [English](https://support.meinewand.com/en/request-for-required-amount-of-wallpaper)
- [Deutsch](https://support.meinewand.com/de/anfrage-tapetenbedarf)
- [Français](https://support.meinewand.com/fr/demande-de-papier-peint)
- [Italiano](https://support.meinewand.com/it/richiesta-di-carta-da-parati)

English

Show submenu for translations

[![MEINEWAND Onlineshop](https://support.meinewand.com/hs-fs/hubfs/meinewand_logo@2x.webp?width=488&height=78&name=meinewand_logo@2x.webp)](https://www.meinewand.com/en)

Open main navigation

Close main navigation

- - [English](https://support.meinewand.com/en/request-for-required-amount-of-wallpaper)
    - [Deutsch](https://support.meinewand.com/de/anfrage-tapetenbedarf)
    - [Français](https://support.meinewand.com/fr/demande-de-papier-peint)
    - [Italiano](https://support.meinewand.com/it/richiesta-di-carta-da-parati)

  English
  
  Show submenu for translations
- [Contact us](https://support.meinewand.com/en/contact)

[Contact us](https://support.meinewand.com/en/contact?hsLang=en)

 Hello. How can we help you?

- There are no suggestions because the search field is empty.

1. [Help Center](https://support.meinewand.com/en?hsLang=en)
2. [Service Center](https://support.meinewand.com/en/service-center?hsLang=en)
3. [Service Forms](https://support.meinewand.com/en/service-center?hsLang=en#service-forms)

# Wallpaper Calculator + Request for required amount of wallpaper

## Wallpaper calculator for estimating requirements and a form for calculating exact requirements

Here is a wallpaper calculator that you can use to estimate your wallpaper requirements.  
The calculations are NOT exact, they are only intended as a rough estimate!

For an exact calculation of your requirements, please contact our service team using the form below. **[\>\> Go to the form for an exact calculation!](https://support.meinewand.com/en/request-for-required-amount-of-wallpaper#Faormular-Tapetenbedarf)**

 

<iframe title="Wallpaper Calculator" style="width:100%;max-width:920px;min-height:760px;border:0;display:block;margin:0 auto;overflow:hidden;" loading="lazy" srcdoc="<!DOCTYPE html>
<html lang=&quot;en&quot;>
<head>
  <meta charset=&quot;utf-8&quot;>
  <meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;>
  <title>MEINEWAND Wallpaper Calculator</title>
  <link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;>
  <link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin>
  <link href=&quot;https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600&amp;family=Inter:wght@400;500&amp;display=swap&quot; rel=&quot;stylesheet&quot;>
  <style>
    html, body { margin: 0; padding: 0; background: #faf7f2; }
  </style>
</head>
<body>
<div id=&quot;mw-tapetenrechner&quot; data-default-overlap=&quot;10&quot;>
  <style>
    /* === MEINEWAND Markenvariablen ============================== */
    #mw-tapetenrechner {
      --mw-bg:        #faf7f2;
      --mw-surface:   #ffffff;
      --mw-ink:       #1c1c1c;
      --mw-ink-soft:  #4a4a4a;
      --mw-muted:     #8a857d;
      --mw-line:      #e6e0d6;
      --mw-accent:    #b89968;
      --mw-accent-dk: #8d6f43;
      --mw-soft:      #f3ede2;
      --mw-error:     #a83232;

      --mw-radius:    4px;
      --mw-font-head: 'Cormorant Garamond', 'Playfair Display', Georgia, serif;
      --mw-font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;

      font-family: var(--mw-font-body);
      color: var(--mw-ink);
      background: var(--mw-bg);
      max-width: 880px;
      margin: 0 auto;
      padding: 32px 28px 40px;
      box-sizing: border-box;
      line-height: 1.55;
      font-size: 15px;
    }

    #mw-tapetenrechner *,
    #mw-tapetenrechner *::before,
    #mw-tapetenrechner *::after { box-sizing: border-box; }

    #mw-tapetenrechner h2 {
      font-family: var(--mw-font-head);
      font-weight: 500;
      font-size: 32px;
      line-height: 1.15;
      margin: 0 0 6px;
      letter-spacing: 0.2px;
    }
    #mw-tapetenrechner h3 {
      font-family: var(--mw-font-head);
      font-weight: 500;
      font-size: 20px;
      margin: 0 0 14px;
      letter-spacing: 0.3px;
    }
    #mw-tapetenrechner .mw-lead {
      color: var(--mw-ink-soft);
      margin: 0 0 24px;
      font-size: 14px;
    }
    #mw-tapetenrechner .mw-card {
      background: var(--mw-surface);
      border: 1px solid var(--mw-line);
      border-radius: var(--mw-radius);
      padding: 22px 22px 18px;
      margin-bottom: 18px;
    }
    #mw-tapetenrechner label {
      display: block;
      font-size: 12px;
      letter-spacing: 0.6px;
      text-transform: uppercase;
      color: var(--mw-muted);
      margin: 0 0 6px;
      font-weight: 500;
    }
    #mw-tapetenrechner input[type=&quot;number&quot;],
    #mw-tapetenrechner input[type=&quot;text&quot;],
    #mw-tapetenrechner select {
      width: 100%;
      padding: 10px 12px;
      border: 1px solid var(--mw-line);
      border-radius: var(--mw-radius);
      background: #fff;
      font-family: inherit;
      font-size: 15px;
      color: var(--mw-ink);
      transition: border-color .15s ease, box-shadow .15s ease;
      -moz-appearance: textfield;
    }
    #mw-tapetenrechner input[type=number]::-webkit-outer-spin-button,
    #mw-tapetenrechner input[type=number]::-webkit-inner-spin-button {
      -webkit-appearance: none; margin: 0;
    }
    #mw-tapetenrechner input:focus,
    #mw-tapetenrechner select:focus {
      outline: none;
      border-color: var(--mw-accent);
      box-shadow: 0 0 0 3px rgba(184,153,104,.18);
    }
    #mw-tapetenrechner .mw-grid {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 14px 16px;
    }
    #mw-tapetenrechner .mw-grid-3 {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 14px 16px;
    }
    @media (max-width: 600px) {
      #mw-tapetenrechner { padding: 22px 16px; }
      #mw-tapetenrechner h2 { font-size: 26px; }
      #mw-tapetenrechner .mw-grid,
      #mw-tapetenrechner .mw-grid-3 { grid-template-columns: 1fr; }
    }
    #mw-tapetenrechner .mw-hint {
      display: block;
      font-size: 12px;
      color: var(--mw-muted);
      margin-top: 4px;
      text-transform: none;
      letter-spacing: 0;
    }
    #mw-tapetenrechner .mw-row-head {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 12px;
    }
    #mw-tapetenrechner .mw-row-head h4 {
      font-family: var(--mw-font-head);
      font-weight: 500;
      font-size: 17px;
      margin: 0;
    }
    #mw-tapetenrechner .mw-wall {
      border: 1px solid var(--mw-line);
      border-radius: var(--mw-radius);
      padding: 16px;
      margin-bottom: 12px;
      background: #fcfaf6;
    }
    #mw-tapetenrechner .mw-opening {
      display: grid;
      grid-template-columns: 1fr 1fr auto;
      gap: 10px;
      align-items: end;
      margin-top: 8px;
    }
    #mw-tapetenrechner .mw-openings { margin-top: 14px; }
    #mw-tapetenrechner .mw-openings-head {
      font-size: 12px;
      letter-spacing: 0.6px;
      text-transform: uppercase;
      color: var(--mw-muted);
      margin: 4px 0 8px;
    }
    #mw-tapetenrechner .mw-btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      padding: 11px 22px;
      font-family: inherit;
      font-size: 14px;
      letter-spacing: 0.8px;
      text-transform: uppercase;
      border-radius: var(--mw-radius);
      cursor: pointer;
      border: 1px solid var(--mw-ink);
      background: var(--mw-ink);
      color: #fff;
      transition: background .15s ease, color .15s ease, border-color .15s ease;
      font-weight: 500;
    }
    #mw-tapetenrechner .mw-btn:hover { background: var(--mw-accent-dk); border-color: var(--mw-accent-dk); }
    #mw-tapetenrechner .mw-btn-ghost {
      background: transparent;
      color: var(--mw-ink);
      border: 1px solid var(--mw-line);
    }
    #mw-tapetenrechner .mw-btn-ghost:hover {
      background: var(--mw-soft);
      border-color: var(--mw-accent);
      color: var(--mw-ink);
    }
    #mw-tapetenrechner .mw-btn-link {
      background: none;
      border: none;
      color: var(--mw-accent-dk);
      cursor: pointer;
      font: inherit;
      padding: 4px 6px;
      font-size: 13px;
      text-decoration: underline;
      text-underline-offset: 3px;
    }
    #mw-tapetenrechner .mw-btn-link:hover { color: var(--mw-ink); }
    #mw-tapetenrechner .mw-btn-icon {
      width: 32px; height: 32px;
      border: 1px solid var(--mw-line);
      background: #fff;
      border-radius: var(--mw-radius);
      cursor: pointer;
      color: var(--mw-ink-soft);
      font-size: 18px;
      line-height: 1;
      display: inline-flex;
      align-items: center;
      justify-content: center;
    }
    #mw-tapetenrechner .mw-btn-icon:hover { background: var(--mw-soft); color: var(--mw-error); border-color: var(--mw-error); }
    #mw-tapetenrechner .mw-actions {
      display: flex;
      gap: 12px;
      flex-wrap: wrap;
      margin-top: 8px;
      margin-bottom: 24px;
    }
    #mw-tapetenrechner .mw-result {
      background: var(--mw-ink);
      color: #fff;
      border-radius: var(--mw-radius);
      padding: 28px 26px;
      margin-top: 8px;
    }
    #mw-tapetenrechner .mw-result h3 {
      color: #fff;
      margin-bottom: 4px;
    }
    #mw-tapetenrechner .mw-result .mw-result-sub {
      color: rgba(255,255,255,.65);
      font-size: 13px;
      margin-bottom: 18px;
    }
    #mw-tapetenrechner .mw-result-big {
      font-family: var(--mw-font-head);
      font-size: 56px;
      line-height: 1;
      color: var(--mw-accent);
      margin: 14px 0 4px;
      font-weight: 500;
    }
    #mw-tapetenrechner .mw-result-big small {
      font-size: 18px;
      color: rgba(255,255,255,.7);
      margin-left: 8px;
      font-family: var(--mw-font-body);
    }
    #mw-tapetenrechner .mw-result table {
      width: 100%;
      border-collapse: collapse;
      margin-top: 18px;
      font-size: 14px;
    }
    #mw-tapetenrechner .mw-result th,
    #mw-tapetenrechner .mw-result td {
      text-align: left;
      padding: 8px 10px;
      border-bottom: 1px solid rgba(255,255,255,.1);
    }
    #mw-tapetenrechner .mw-result th {
      font-weight: 500;
      color: rgba(255,255,255,.6);
      text-transform: uppercase;
      letter-spacing: 0.6px;
      font-size: 11px;
    }
    #mw-tapetenrechner .mw-result td.num { text-align: right; font-variant-numeric: tabular-nums; }
    #mw-tapetenrechner .mw-result th.num { text-align: right; }
    #mw-tapetenrechner .mw-result-meta {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 14px;
      margin-top: 22px;
      padding-top: 18px;
      border-top: 1px solid rgba(255,255,255,.12);
    }
    @media (max-width: 600px) {
      #mw-tapetenrechner .mw-result-meta { grid-template-columns: 1fr; }
      #mw-tapetenrechner .mw-result-big { font-size: 44px; }
    }
    #mw-tapetenrechner .mw-result-meta .mw-meta-label {
      font-size: 11px; text-transform: uppercase; letter-spacing: 0.6px;
      color: rgba(255,255,255,.6); margin-bottom: 4px;
    }
    #mw-tapetenrechner .mw-result-meta .mw-meta-value {
      font-size: 18px; color: #fff; font-variant-numeric: tabular-nums;
    }
    #mw-tapetenrechner .mw-error-box {
      background: #fdecec;
      border: 1px solid var(--mw-error);
      color: var(--mw-error);
      padding: 12px 14px;
      border-radius: var(--mw-radius);
      margin-bottom: 16px;
      font-size: 14px;
    }
    #mw-tapetenrechner .mw-foot-note {
      font-size: 12px;
      color: var(--mw-muted);
      margin-top: 16px;
      line-height: 1.5;
    }
    #mw-tapetenrechner details.mw-details {
      margin-top: 14px;
      border-top: 1px solid rgba(255,255,255,.12);
      padding-top: 14px;
    }
    #mw-tapetenrechner details.mw-details summary {
      cursor: pointer;
      font-size: 13px;
      color: rgba(255,255,255,.8);
      letter-spacing: 0.4px;
      list-style: none;
      display: inline-flex;
      align-items: center;
      gap: 6px;
    }
    #mw-tapetenrechner details.mw-details summary::-webkit-details-marker { display: none; }
    #mw-tapetenrechner details.mw-details summary::after {
      content: &quot;\25BE&quot;; font-size: 11px; color: var(--mw-accent);
    }
    #mw-tapetenrechner details.mw-details[open] summary::after { content: &quot;\25B4&quot;; }
  </style>

  <h2>Wallpaper Calculator</h2>
  <p class=&quot;mw-lead&quot;>Calculate exactly how many wallpaper rolls you need &amp;ndash; including pattern repeat, match type and smart leftover optimization across multiple walls.</p>

  <!-- ===================== TAPETE ===================== -->
  <div class=&quot;mw-card&quot;>
    <h3>1. Your Wallpaper</h3>
    <div class=&quot;mw-grid&quot;>
      <div>
        <label for=&quot;mw-mode&quot;>Sold as</label>
        <select id=&quot;mw-mode&quot;>
          <option value=&quot;roll&quot;>Rolls</option>
          <option value=&quot;meter&quot;>By the meter (linear meters)</option>
        </select>
        <span class=&quot;mw-hint&quot;>Is the wallpaper sold as rolls or by the meter?</span>
      </div>
      <div id=&quot;mw-roll-length-wrap&quot;>
        <label for=&quot;mw-roll-length&quot;>Roll length</label>
        <input type=&quot;number&quot; id=&quot;mw-roll-length&quot; min=&quot;0.1&quot; step=&quot;0.1&quot; value=&quot;10&quot;>
        <span class=&quot;mw-hint&quot;>in meters (default: 10 m)</span>
      </div>
      <div>
        <label for=&quot;mw-roll-width&quot; id=&quot;mw-roll-width-label&quot;>Roll width</label>
        <input type=&quot;number&quot; id=&quot;mw-roll-width&quot; min=&quot;1&quot; step=&quot;1&quot; value=&quot;50&quot;>
        <span class=&quot;mw-hint&quot;>in centimeters (e.g. 50, 53, 70, 100)</span>
      </div>
      <div>
        <label for=&quot;mw-rapport&quot;>Pattern repeat</label>
        <input type=&quot;text&quot; inputmode=&quot;decimal&quot; id=&quot;mw-rapport&quot; value=&quot;0&quot;>
        <span class=&quot;mw-hint&quot;>in centimeters &amp;ndash; enter the repeat only (e.g. 200); 0 if plain / no pattern</span>
      </div>
      <div>
        <label for=&quot;mw-match&quot;>Match type</label>
        <select id=&quot;mw-match&quot;>
          <option value=&quot;free&quot;>Free match / no pattern</option>
          <option value=&quot;straight&quot;>Straight match</option>
          <option value=&quot;offset&quot;>Offset match (&amp;frac12; repeat)</option>
        </select>
        <span class=&quot;mw-hint&quot;>Usually printed on the wallpaper label</span>
      </div>
      <div>
        <label for=&quot;mw-overlap&quot;>Trim allowance per strip</label>
        <input type=&quot;number&quot; id=&quot;mw-overlap&quot; min=&quot;0&quot; step=&quot;1&quot; value=&quot;10&quot;>
        <span class=&quot;mw-hint&quot;>in centimeters (default: 10 cm for ceiling / skirting)</span>
      </div>
    </div>
  </div>

  <!-- ===================== W&amp;Auml;NDE ===================== -->
  <div class=&quot;mw-card&quot;>
    <div class=&quot;mw-row-head&quot;>
      <h3>2. Your Walls</h3>
      <button type=&quot;button&quot; class=&quot;mw-btn mw-btn-ghost&quot; id=&quot;mw-add-wall&quot;>+ Add wall</button>
    </div>
    <div id=&quot;mw-walls&quot;></div>
  </div>

  <!-- ===================== ACTIONS ===================== -->
  <div class=&quot;mw-actions&quot;>
    <button type=&quot;button&quot; class=&quot;mw-btn&quot; id=&quot;mw-calc&quot;>Calculate wallpaper needed</button>
    <button type=&quot;button&quot; class=&quot;mw-btn mw-btn-ghost&quot; id=&quot;mw-reset&quot;>Reset</button>
  </div>

  <!-- ===================== RESULT ===================== -->
  <div id=&quot;mw-output&quot;></div>

  <p class=&quot;mw-foot-note&quot;>
    Note: This calculator provides a careful estimate based on your input. For heavily patterned or particularly valuable wallpapers, we recommend planning an extra reserve roll. For a binding recommendation, please contact our support team.
  </p>

  <script>
  (function () {
    // UI strings as Unicode escapes (encoding-safe).
    var T = {
      wand:           &quot;Wall&quot;,
      wandEntfernen:  &quot;Remove wall&quot;,
      wandHinzu:      &quot;+ Add wall&quot;,
      wandbreite:     &quot;Wall width&quot;,
      wandhoehe:      &quot;Wall height&quot;,
      bezeichnung:    &quot;Label (optional)&quot;,
      placeholderName:&quot;e.g. Living room south&quot;,
      aussparungen:   &quot;Openings (doors / windows) \u2013 optional&quot;,
      addOpening:     &quot;+ Add door / window&quot;,
      breite:         &quot;Width&quot;,
      hoehe:          &quot;Height&quot;,
      rmOpening:      &quot;Remove opening&quot;,
      errRoll:        &quot;Please enter a valid roll length and roll width.&quot;,
      errWalls:       &quot;Please add at least one wall.&quot;,
      errWallVals:    &quot;Please enter width and height for {name}.&quot;,
      errStripTooLong:&quot;A single wallpaper strip ({len} m) is longer than your roll length ({roll} m). Please check wall height, pattern repeat and roll length.&quot;,
      tHead: {
        wall: &quot;Wall&quot;, area: &quot;Net area&quot;, strips: &quot;Strips&quot;,
        stripLen: &quot;Strip length&quot;, total: &quot;Wallpaper needed&quot;
      },
      meta: {
        area:  &quot;Papered area (net)&quot;,
        used:  &quot;Wallpaper actually needed&quot;,
        waste: &quot;Trim / leftover&quot;
      },
      result:        &quot;Your wallpaper requirement&quot;,
      rollsLabel:    &quot;roll{n} needed&quot;,
      matchFree:     &quot;Free match&quot;,
      matchStraight: &quot;Straight match&quot;,
      matchOffset:   &quot;Offset match&quot;,
      schnittplan:   &quot;Detailed cutting plan \u2013 which strip from which roll?&quot;,
      rolle:         &quot;Roll&quot;,
      verbraucht:    &quot;Used&quot;,
      rest:          &quot;Leftover&quot;,
      bahnen:        &quot;Strips&quot;,
      aussparung:    &quot;opening&quot;,
      aussparungen2: &quot;openings&quot;,
      meterBezug:    &quot;By the meter&quot;,
      mLabel:        &quot;m needed&quot;,
      exakteLaenge:  &quot;Exact length&quot;,
      bestellmenge:  &quot;Order quantity (rounded up)&quot;,
      meterHinweis:  &quot;For wallpaper sold by the meter, the total length of all strips is added up and rounded up to the next full meter.&quot;,
      errWidth:      &quot;Please enter a valid strip width.&quot;,
      bahnbreite:    &quot;Strip width&quot;,
      rollenbreite:  &quot;Roll width&quot;
    };

    var root = document.getElementById('mw-tapetenrechner');
    var wallsEl = root.querySelector('#mw-walls');
    var outputEl = root.querySelector('#mw-output');
    var wallSeq = 0;

    var modeEl = root.querySelector('#mw-mode');
    var rollLenWrap = root.querySelector('#mw-roll-length-wrap');
    var rollWidthLabel = root.querySelector('#mw-roll-width-label');
    function updateMode() {
      var meter = modeEl.value === 'meter';
      rollLenWrap.style.display = meter ? 'none' : '';
      rollWidthLabel.textContent = meter ? T.bahnbreite : T.rollenbreite;
    }
    modeEl.addEventListener('change', updateMode);

    function addWall(prefill) {
      wallSeq++;
      var w = document.createElement('div');
      w.className = 'mw-wall';
      w.dataset.wallId = wallSeq;
      w.innerHTML =
        '<div class=&quot;mw-row-head&quot;>' +
          '<h4>' + T.wand + ' <span class=&quot;mw-wall-num&quot;>' + (wallsEl.children.length + 1) + '</span></h4>' +
          '<button type=&quot;button&quot; class=&quot;mw-btn-icon&quot; title=&quot;' + T.wandEntfernen + '&quot; data-action=&quot;remove-wall&quot;>\u00d7</button>' +
        '</div>' +
        '<div class=&quot;mw-grid-3&quot;>' +
          '<div>' +
            '<label>' + T.wandbreite + '</label>' +
            '<input type=&quot;number&quot; class=&quot;mw-wall-width&quot; min=&quot;1&quot; step=&quot;1&quot; placeholder=&quot;cm&quot; value=&quot;' + (prefill &amp;&amp; prefill.width ? prefill.width : '') + '&quot;>' +
            '<span class=&quot;mw-hint&quot;>in cm</span>' +
          '</div>' +
          '<div>' +
            '<label>' + T.wandhoehe + '</label>' +
            '<input type=&quot;number&quot; class=&quot;mw-wall-height&quot; min=&quot;1&quot; step=&quot;1&quot; placeholder=&quot;cm&quot; value=&quot;' + (prefill &amp;&amp; prefill.height ? prefill.height : '') + '&quot;>' +
            '<span class=&quot;mw-hint&quot;>in cm</span>' +
          '</div>' +
          '<div>' +
            '<label>' + T.bezeichnung + '</label>' +
            '<input type=&quot;text&quot; class=&quot;mw-wall-name&quot; placeholder=&quot;' + T.placeholderName + '&quot;>' +
          '</div>' +
        '</div>' +
        '<div class=&quot;mw-openings&quot;>' +
          '<div class=&quot;mw-openings-head&quot;>' + T.aussparungen + '</div>' +
          '<div class=&quot;mw-openings-list&quot;></div>' +
          '<button type=&quot;button&quot; class=&quot;mw-btn-link&quot; data-action=&quot;add-opening&quot;>' + T.addOpening + '</button>' +
        '</div>';
      wallsEl.appendChild(w);
      renumberWalls();
    }

    function addOpening(wallEl, prefill) {
      var list = wallEl.querySelector('.mw-openings-list');
      var o = document.createElement('div');
      o.className = 'mw-opening';
      o.innerHTML =
        '<div>' +
          '<label>' + T.breite + '</label>' +
          '<input type=&quot;number&quot; class=&quot;mw-op-width&quot; min=&quot;1&quot; step=&quot;1&quot; placeholder=&quot;cm&quot; value=&quot;' + (prefill &amp;&amp; prefill.width ? prefill.width : '') + '&quot;>' +
        '</div>' +
        '<div>' +
          '<label>' + T.hoehe + '</label>' +
          '<input type=&quot;number&quot; class=&quot;mw-op-height&quot; min=&quot;1&quot; step=&quot;1&quot; placeholder=&quot;cm&quot; value=&quot;' + (prefill &amp;&amp; prefill.height ? prefill.height : '') + '&quot;>' +
        '</div>' +
        '<button type=&quot;button&quot; class=&quot;mw-btn-icon&quot; title=&quot;' + T.rmOpening + '&quot; data-action=&quot;remove-opening&quot;>\u00d7</button>';
      list.appendChild(o);
    }

    function renumberWalls() {
      var nodes = wallsEl.children;
      for (var i = 0; i < nodes.length; i++) {
        nodes[i].querySelector('.mw-wall-num').textContent = i + 1;
      }
    }

    root.querySelector('#mw-add-wall').addEventListener('click', function () { addWall(); });

    wallsEl.addEventListener('click', function (e) {
      var btn = e.target.closest('button[data-action]');
      if (!btn) return;
      var action = btn.dataset.action;
      var wallEl = btn.closest('.mw-wall');
      if (action === 'remove-wall') {
        wallEl.remove();
        renumberWalls();
      } else if (action === 'add-opening') {
        addOpening(wallEl);
      } else if (action === 'remove-opening') {
        btn.closest('.mw-opening').remove();
      }
    });

    root.querySelector('#mw-reset').addEventListener('click', function () {
      wallsEl.innerHTML = '';
      outputEl.innerHTML = '';
      addWall();
    });

    root.querySelector('#mw-calc').addEventListener('click', calculate);

    function readNum(el, fallback) {
      var v = parseFloat((el.value || '').toString().replace(',', '.'));
      return isNaN(v) ? fallback : v;
    }
    function showError(msg) {
      outputEl.innerHTML = '<div class=&quot;mw-error-box&quot;>' + msg + '</div>';
    }
    function escapeHtml(str) {
      return String(str).replace(/[&amp;<>&quot;']/g, function (c) {
        return ({ '&amp;':'&amp;amp;','<':'&amp;lt;','>':'&amp;gt;','&quot;':'&amp;quot;',&quot;'&quot;:'&amp;#39;' })[c];
      });
    }

    function calculate() {
      var mode        = modeEl.value;
      var rollLengthM = readNum(root.querySelector('#mw-roll-length'), 0);
      var rollWidth   = readNum(root.querySelector('#mw-roll-width'), 0);
      var rapport     = Math.max(0, readNum(root.querySelector('#mw-rapport'), 0));
      var match       = root.querySelector('#mw-match').value;
      var overlap     = Math.max(0, readNum(root.querySelector('#mw-overlap'), 0));

      if (rollWidth <= 0 || (mode === 'roll' &amp;&amp; rollLengthM <= 0)) {
        showError(mode === 'meter' ? T.errWidth : T.errRoll);
        return;
      }
      var rollLength = (mode === 'meter') ? Infinity : rollLengthM * 100;

      var wallEls = [].slice.call(wallsEl.children);
      if (wallEls.length === 0) {
        showError(T.errWalls);
        return;
      }

      var walls = [];
      for (var i = 0; i < wallEls.length; i++) {
        var el = wallEls[i];
        var wWidth  = readNum(el.querySelector('.mw-wall-width'), 0);
        var wHeight = readNum(el.querySelector('.mw-wall-height'), 0);
        var wName   = (el.querySelector('.mw-wall-name').value || '').trim() || (T.wand + ' ' + (i + 1));
        if (wWidth <= 0 || wHeight <= 0) {
          showError(T.errWallVals.replace('{name}', wName));
          return;
        }
        var openings = [];
        el.querySelectorAll('.mw-opening').forEach(function (op) {
          var oW = readNum(op.querySelector('.mw-op-width'), 0);
          var oH = readNum(op.querySelector('.mw-op-height'), 0);
          if (oW > 0 &amp;&amp; oH > 0) openings.push({ width: oW, height: oH });
        });
        walls.push({ name: wName, width: wWidth, height: wHeight, openings: openings });
      }

      // Compute strips per wall
      var stripsAll = [];
      walls.forEach(function (wall) {
        var stripsCount = Math.ceil(wall.width / rollWidth);
        for (var k = 0; k < stripsCount; k++) {
          var stripLen;
          if (match === 'free' || rapport <= 0) {
            stripLen = wall.height + overlap;
          } else if (match === 'straight') {
            stripLen = Math.ceil((wall.height + overlap) / rapport) * rapport;
          } else {
            // Versetzter Ansatz (Halbversatz): jede Bahn wird wie beim geraden
            // Ansatz auf ein volles Vielfaches des Rapports aufgerundet. Da sich
            // das Muster von Bahn zu Bahn um einen halben Rapport verschiebt,
            // braucht nur JEDE ZWEITE Bahn zusaetzlich einen halben Rapport
            // Zuschlag - nicht jede Bahn.
            var base = Math.ceil((wall.height + overlap) / rapport) * rapport;
            stripLen = (k % 2 === 1) ? base + (rapport / 2) : base;
          }
          if (stripLen > rollLength) {
            stripsAll.push({ tooLong: true, wall: wall.name, length: stripLen });
          } else {
            stripsAll.push({ wall: wall.name, idx: k + 1, length: stripLen });
          }
        }
      });

      var tooLong = stripsAll.find(function (s) { return s.tooLong; });
      if (tooLong) {
        showError(T.errStripTooLong
          .replace('{len}', (tooLong.length / 100).toFixed(2))
          .replace('{roll}', (rollLength / 100).toFixed(2)));
        return;
      }

      // ============ METERWARE ============
      if (mode === 'meter') {
        var perWallM = walls.map(function (w) {
          var ws = stripsAll.filter(function (s) { return s.wall === w.name; });
          var tl = ws.reduce(function (s, x) { return s + x.length; }, 0);
          var wa = (w.width * w.height) / 10000;
          var oa = w.openings.reduce(function (s, o) { return s + (o.width * o.height) / 10000; }, 0);
          return {
            name: w.name,
            stripsCount: ws.length,
            stripLengthCm: ws[0] ? ws[0].length : 0,
            stripLengthVaries: ws.some(function (s) { return s.length !== ws[0].length; }),
            totalLenM: tl / 100,
            netAreaM2: Math.max(0, wa - oa),
            openingsCount: w.openings.length
          };
        });
        var mUsedM = stripsAll.reduce(function (s, x) { return s + x.length; }, 0) / 100;
        var mOrderM = Math.ceil(mUsedM);
        var mNetArea = perWallM.reduce(function (s, w) { return s + w.netAreaM2; }, 0);
        var mMatch = match === 'free' ? T.matchFree : (match === 'straight' ? T.matchStraight : T.matchOffset);
        var mRows = perWallM.map(function (w) {
          var openTxt = w.openingsCount
            ? ' <span style=&quot;color:rgba(255,255,255,.5);font-size:11px&quot;>(' + w.openingsCount + ' ' + (w.openingsCount > 1 ? T.aussparungen2 : T.aussparung) + ')</span>'
            : '';
          return '<tr>' +
            '<td>' + escapeHtml(w.name) + openTxt + '</td>' +
            '<td class=&quot;num&quot;>' + w.netAreaM2.toFixed(2) + ' m²</td>' +
            '<td class=&quot;num&quot;>' + w.stripsCount + '</td>' +
            '<td class=&quot;num&quot;>' + (w.stripLengthVaries ? '~' : '') + (w.stripLengthCm / 100).toFixed(2) + ' m</td>' +
            '<td class=&quot;num&quot;>' + w.totalLenM.toFixed(2) + ' m</td>' +
          '</tr>';
        }).join('');
        outputEl.innerHTML =
          '<div class=&quot;mw-result&quot;>' +
            '<h3>' + T.result + '</h3>' +
            '<div class=&quot;mw-result-sub&quot;>' + mMatch + (rapport > 0 ? ' &amp;middot; Repeat ' + rapport + ' cm' : '') + ' &amp;middot; ' + T.meterBezug + ' &amp;middot; ' + T.bahnbreite + ' ' + rollWidth + ' cm</div>' +
            '<div class=&quot;mw-result-big&quot;>' + mOrderM + '<small>' + T.mLabel + '</small></div>' +
            '<table>' +
              '<thead><tr>' +
                '<th>' + T.tHead.wall + '</th>' +
                '<th class=&quot;num&quot;>' + T.tHead.area + '</th>' +
                '<th class=&quot;num&quot;>' + T.tHead.strips + '</th>' +
                '<th class=&quot;num&quot;>' + T.tHead.stripLen + '</th>' +
                '<th class=&quot;num&quot;>' + T.tHead.total + '</th>' +
              '</tr></thead>' +
              '<tbody>' + mRows + '</tbody>' +
            '</table>' +
            '<div class=&quot;mw-result-meta&quot;>' +
              '<div><div class=&quot;mw-meta-label&quot;>' + T.meta.area + '</div><div class=&quot;mw-meta-value&quot;>' + mNetArea.toFixed(2) + ' m²</div></div>' +
              '<div><div class=&quot;mw-meta-label&quot;>' + T.exakteLaenge + '</div><div class=&quot;mw-meta-value&quot;>' + mUsedM.toFixed(2) + ' m</div></div>' +
              '<div><div class=&quot;mw-meta-label&quot;>' + T.bestellmenge + '</div><div class=&quot;mw-meta-value&quot;>' + mOrderM + ' m</div></div>' +
            '</div>' +
            '<p style=&quot;margin-top:16px;font-size:12px;color:rgba(255,255,255,.6);line-height:1.5;&quot;>' + T.meterHinweis + '</p>' +
          '</div>';
        if (outputEl.scrollIntoView) { outputEl.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
        return;
      }

      // Bin packing (first-fit decreasing) -> leftover optimization
      var sorted = stripsAll.slice().sort(function (a, b) { return b.length - a.length; });
      var rolls = [];
      sorted.forEach(function (strip) {
        var placed = false;
        for (var r = 0; r < rolls.length; r++) {
          if (rolls[r].remaining + 1e-6 >= strip.length) {
            rolls[r].remaining -= strip.length;
            rolls[r].strips.push(strip);
            placed = true;
            break;
          }
        }
        if (!placed) {
          rolls.push({ remaining: rollLength - strip.length, strips: [strip] });
        }
      });

      // Per-wall breakdown
      var perWall = walls.map(function (w) {
        var wallStrips = stripsAll.filter(function (s) { return s.wall === w.name; });
        var totalLen = wallStrips.reduce(function (s, x) { return s + x.length; }, 0);
        var wallArea = (w.width * w.height) / 10000;
        var openingsArea = w.openings.reduce(function (s, o) { return s + (o.width * o.height) / 10000; }, 0);
        return {
          name: w.name,
          stripsCount: wallStrips.length,
          stripLengthCm: wallStrips[0] ? wallStrips[0].length : 0,
          stripLengthVaries: wallStrips.some(function (s) { return s.length !== wallStrips[0].length; }),
          totalLenM: totalLen / 100,
          netAreaM2: Math.max(0, wallArea - openingsArea),
          openingsCount: w.openings.length
        };
      });

      var totalRolls = rolls.length;
      var totalUsedM = stripsAll.reduce(function (s, x) { return s + x.length; }, 0) / 100;
      var totalAvailableM = totalRolls * rollLengthM;
      var wasteM = totalAvailableM - totalUsedM;
      var totalNetArea = perWall.reduce(function (s, w) { return s + w.netAreaM2; }, 0);

      var matchLabel = match === 'free' ? T.matchFree : (match === 'straight' ? T.matchStraight : T.matchOffset);

      var wallRows = perWall.map(function (w) {
        var openTxt = w.openingsCount
          ? ' <span style=&quot;color:rgba(255,255,255,.5);font-size:11px&quot;>(' + w.openingsCount + ' ' + (w.openingsCount > 1 ? T.aussparungen2 : T.aussparung) + ')</span>'
          : '';
        return '<tr>' +
          '<td>' + escapeHtml(w.name) + openTxt + '</td>' +
          '<td class=&quot;num&quot;>' + w.netAreaM2.toFixed(2) + ' m\u00b2</td>' +
          '<td class=&quot;num&quot;>' + w.stripsCount + '</td>' +
          '<td class=&quot;num&quot;>' + (w.stripLengthVaries ? '~' : '') + (w.stripLengthCm / 100).toFixed(2) + ' m</td>' +
          '<td class=&quot;num&quot;>' + w.totalLenM.toFixed(2) + ' m</td>' +
        '</tr>';
      }).join('');

      var rollDetails = rolls.map(function (r, i) {
        return '<tr>' +
          '<td>' + T.rolle + ' ' + (i + 1) + '</td>' +
          '<td class=&quot;num&quot;>' + r.strips.length + '</td>' +
          '<td class=&quot;num&quot;>' + ((rollLength - r.remaining) / 100).toFixed(2) + ' m</td>' +
          '<td class=&quot;num&quot;>' + (r.remaining / 100).toFixed(2) + ' m</td>' +
        '</tr>';
      }).join('');

      var rollsLabel = T.rollsLabel.replace('{n}', totalRolls === 1 ? '' : 's');

      outputEl.innerHTML =
        '<div class=&quot;mw-result&quot;>' +
          '<h3>' + T.result + '</h3>' +
          '<div class=&quot;mw-result-sub&quot;>' + matchLabel + (rapport > 0 ? ' &amp;middot; Repeat ' + rapport + ' cm' : '') + ' &amp;middot; Roll ' + rollWidth + ' cm \u00d7 ' + rollLengthM + ' m</div>' +
          '<div class=&quot;mw-result-big&quot;>' + totalRolls + '<small>' + rollsLabel + '</small></div>' +
          '<table>' +
            '<thead><tr>' +
              '<th>' + T.tHead.wall + '</th>' +
              '<th class=&quot;num&quot;>' + T.tHead.area + '</th>' +
              '<th class=&quot;num&quot;>' + T.tHead.strips + '</th>' +
              '<th class=&quot;num&quot;>' + T.tHead.stripLen + '</th>' +
              '<th class=&quot;num&quot;>' + T.tHead.total + '</th>' +
            '</tr></thead>' +
            '<tbody>' + wallRows + '</tbody>' +
          '</table>' +
          '<div class=&quot;mw-result-meta&quot;>' +
            '<div><div class=&quot;mw-meta-label&quot;>' + T.meta.area  + '</div><div class=&quot;mw-meta-value&quot;>' + totalNetArea.toFixed(2) + ' m\u00b2</div></div>' +
            '<div><div class=&quot;mw-meta-label&quot;>' + T.meta.used  + '</div><div class=&quot;mw-meta-value&quot;>' + totalUsedM.toFixed(2)   + ' m</div></div>' +
            '<div><div class=&quot;mw-meta-label&quot;>' + T.meta.waste + '</div><div class=&quot;mw-meta-value&quot;>' + wasteM.toFixed(2)        + ' m</div></div>' +
          '</div>' +
          '<details class=&quot;mw-details&quot;>' +
            '<summary>' + T.schnittplan + '</summary>' +
            '<table>' +
              '<thead><tr>' +
                '<th>' + T.rolle + '</th>' +
                '<th class=&quot;num&quot;>' + T.bahnen + '</th>' +
                '<th class=&quot;num&quot;>' + T.verbraucht + '</th>' +
                '<th class=&quot;num&quot;>' + T.rest + '</th>' +
              '</tr></thead>' +
              '<tbody>' + rollDetails + '</tbody>' +
            '</table>' +
            '<div style=&quot;margin-top:14px; font-size:13px; color:rgba(255,255,255,.7); line-height:1.5;&quot;>' +
              rolls.map(function (r, i) {
                return '<div style=&quot;margin-bottom:6px;&quot;>' +
                  '<strong style=&quot;color:var(--mw-accent);&quot;>' + T.rolle + ' ' + (i + 1) + ':</strong> ' +
                  r.strips.map(function (s) { return escapeHtml(s.wall) + ' \u2013 Strip ' + s.idx + ' (' + (s.length / 100).toFixed(2) + ' m)'; }).join(' &amp;middot; ') +
                '</div>';
              }).join('') +
            '</div>' +
          '</details>' +
        '</div>';
      if (outputEl.scrollIntoView) { outputEl.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
    }

    updateMode();
    addWall();
  })();
  </script>
</div>

  <script>
  // Self-fit the iframe height (works because srcdoc is same-origin).
  (function () {
    function mwResize() {
      try {
        if (window.frameElement) {
          window.frameElement.style.height = document.documentElement.scrollHeight + 'px';
        }
      } catch (e) {}
    }
    window.addEventListener('load', mwResize);
    window.addEventListener('resize', mwResize);
    document.addEventListener('click', function () { setTimeout(mwResize, 60); });
    document.addEventListener('input', function () { setTimeout(mwResize, 60); });
    if (window.ResizeObserver) { try { new ResizeObserver(mwResize).observe(document.documentElement); } catch (e) {} }
    setTimeout(mwResize, 200);
    setTimeout(mwResize, 800);
  })();
  </script>

</body>
</html>
"></iframe>

 

We will be happy to calculate the amount of wallpaper you require.

Please send us the completed form and we will usually respond within 24 hours (Monday to Friday). 

 

- [Common Questions](https://support.meinewand.com/en/common-questions?hsLang=en)
- [Wallpaper and Murals](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#main-content)

    - [General questions about wallpaper](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#general-questions-about-wallpaper)
    - [Wallpaper types](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#wallpaper-types)
    - [Wallpaper Needs](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#wallpaper-needs)
    - [Surface preparation](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#surface-preparation)
    - [Wallpapering Tips](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#wallpapering-tips)
    - [Videos: Process wallpaper](https://support.meinewand.com/en/wallpaper-and-murals?hsLang=en#videos-process-wallpaper)
- [Paints](https://support.meinewand.com/en/paints?hsLang=en#main-content)

    - [General questions about our colors](https://support.meinewand.com/en/paints?hsLang=en#general-questions-about-our-colors)
    - [Paint selection: Which paint for which surface](https://support.meinewand.com/en/paints?hsLang=en#paint-selection-which-paint-for-which-surface)
    - [Surface preparation](https://support.meinewand.com/en/paints?hsLang=en#surface-preparation)
    - [Processing and tips](https://support.meinewand.com/en/paints?hsLang=en#processing-and-tips)
- [Professional Paints by Brillux + Eco Paints by Kreidezeit](https://support.meinewand.com/en/professional-paints-by-brillux-eco-paints-by-kreidezeit?hsLang=en#main-content)

    - [How to choose the right paint](https://support.meinewand.com/en/professional-paints-by-brillux-eco-paints-by-kreidezeit?hsLang=en#how-to-choose-the-right-paint)
- [Fabrics](https://support.meinewand.com/en/fabrics?hsLang=en)
- [Terrastone](https://support.meinewand.com/en/terrastone?hsLang=en#main-content)

    - [General information about Terrastone](https://support.meinewand.com/en/terrastone?hsLang=en#general-information-about-terrastone)
    - [Surface preparation for Terrastone](https://support.meinewand.com/en/terrastone?hsLang=en#surface-preparation-for-terrastone)
    - [Terrastone processing](https://support.meinewand.com/en/terrastone?hsLang=en#terrastone-processing)
    - [Terrastone Finishes](https://support.meinewand.com/en/terrastone?hsLang=en#terrastone-finishes)
    - [Technical data sheets](https://support.meinewand.com/en/terrastone?hsLang=en#technical-data-sheets)
- [Decals](https://support.meinewand.com/en/decals?hsLang=en)
- [Sample Center](https://support.meinewand.com/en/sample-center?hsLang=en)
- [Service Center](https://support.meinewand.com/en/service-center?hsLang=en#main-content)

    - [Service Forms](https://support.meinewand.com/en/service-center?hsLang=en#service-forms)
    - [Information](https://support.meinewand.com/en/service-center?hsLang=en#information)
- [Business Customer Area](https://support.meinewand.com/en/business-customer-area?hsLang=en)

[![MEINEWAND Onlineshop](https://support.meinewand.com/hs-fs/hubfs/meinewand_logo@2x.webp?width=488&height=78&name=meinewand_logo@2x.webp "MEINEWAND Onlineshop")](https://www.meinewand.com/en)

www.meinewand.de Help Center

Copyright © 2026, MEINEWAND