{"id":271,"date":"2025-09-21T23:37:18","date_gmt":"2025-09-21T23:37:18","guid":{"rendered":"https:\/\/topsoiltippers.co.za\/?post_type=product&#038;p=271"},"modified":"2026-04-25T20:41:46","modified_gmt":"2026-04-25T20:41:46","slug":"normal-filling","status":"publish","type":"product","link":"https:\/\/topsoiltippers.co.za\/af\/shop\/normal-filling\/","title":{"rendered":"Gewone Vulling (Ondergrond) \u2013 Bekostigbare Grondvulling"},"content":{"rendered":"<p><strong>The Cheapest Way to Fill a Big Hole.<\/strong><\/p>\n<p><strong>Normal Filling<\/strong> (or Sub-Soil) is raw earth sourced from excavations. It is the &#8220;budget&#8221; option when you simply need bulk volume to change the level of your ground. It is not processed or sifted, meaning it may contain small rocks or clods of earth.<\/p>\n<p><strong>When to Use Normal Filling:<\/strong><\/p>\n<p><strong>Raising Levels:<\/strong> Need to raise a section of your garden by 50cm? Use this for the bottom 40cm, and then put good Topsoil on the top 10cm.<br \/>\n<strong>Filling Pools:<\/strong> The most economical material for filling in unwanted swimming pools.<br \/>\n<strong>Backfilling:<\/strong> Ideal for backfilling behind retaining walls or leveling steep slopes before landscaping begins.<br \/>\n<strong>Compaction:<\/strong> Because it lacks organic matter (compost), it compacts harder than topsoil, creating a stable base.<\/p>\n<p>\u26a0\ufe0f <strong>Important Usage Warning:<\/strong> This is <strong>NOT<\/strong> garden soil. It has very low nutrient levels and poor water retention.<\/p>\n<p>Do not plant grass or flowers directly into this.<\/p>\n<p>Always leave room for a layer of <strong>Topsoil<\/strong> or <strong>Compost<\/strong> on top if you plan to garden over the area later.<\/p>\n<p><strong>Delivery:<\/strong> We deliver bulk loads of Normal Filling to <strong>Pretoria East<\/strong>, perfect for construction sites and large residential projects.<\/p>\n<p><strong>Common Questions:<\/strong><\/p>\n<p><strong>What is the difference between Filling and Topsoil?<\/strong> <strong>Topsoil<\/strong> is the top layer of earth, rich in nutrients and good for plants. <strong>Filling<\/strong> is the layer underneath (sub-soil); it is harder, has no nutrients, and is used purely for volume\/construction.<br \/>\n<strong>Does it contain rocks?<\/strong> Yes, because it is &#8220;Unscreened,&#8221; it may contain small rocks, roots, or clods. If you need a clean, smooth sand for under paving, rather use our G5 Filling or River Sand.<br \/>\n<strong>Can I build on top of it?<\/strong> It compacts reasonably well for garden landscaping, but if you are building a driveway or a structure, we recommend using <strong>G5\/G6 Filling<\/strong> which is engineered for road-base compaction.<\/p>\n<p><strong>Disclaimer:<\/strong> At Topsoil Tippers, we strive to ensure that the products you receive match the images and descriptions provided. However, as our materials are sourced from various suppliers, there may be slight variations in color, texture, and composition. Rest assured, we exercise the utmost care to provide products that meet your expectations and are as close to the pictures as possible. Let us help you bring your projects to life with quality products and exceptional service!<\/p>","protected":false},"excerpt":{"rendered":"<p style=\"margin-bottom: 15px;\">\n    <strong style=\"color: #25D366; font-size: 22px;\">\ud83d\udc47 Scroll down to calculate required quantities or ADD TO BASKET<\/strong>\n<\/p>\n<p>The most cost-effective solution for filling deep holes and raising ground levels. Unscreened raw earth (sub-soil) intended for backfilling and bulk volume. <strong>Not suitable for planting.<\/strong><br \/>\n<style>\r\n    .ts-vol-calc-wrapper * { box-sizing: border-box; }\r\n    .ts-vol-calc-wrapper input[type=\"number\"] { margin-bottom: 0 !important; box-shadow: none !important; border: 1px solid #ccc !important; background: #fff !important; height: 45px !important; }\r\n    .vis-stage-vol { height: 240px; display: flex; align-items: center; justify-content: center; background: #fafafa; border: 1px inset #eaeaea; border-radius: 8px; margin-bottom: 20px; overflow: hidden; perspective: 800px; }\r\n    .shape-m3 { position: relative; width: 0px; height: 0px; transform-style: preserve-3d; transform: rotateX(-20deg) rotateY(-40deg); transition: all 0.4s ease; opacity: 0; }\r\n    .cube-face { position: absolute; border: 2px solid #8b6b3d; top: 0; left: 0; transition: all 0.4s ease; transform-style: preserve-3d; }\r\n    .cube-top { background: rgba(225, 200, 150, 0.85); }\r\n    .cube-front { background: rgba(200, 170, 120, 0.95); }\r\n    .cube-right { background: rgba(180, 150, 100, 0.9); }\r\n    .dim-badge-vol { position: absolute; background: rgba(255, 255, 255, 0.95); padding: 5px 8px; border-radius: 4px; font-size: 14px; font-weight: 800; box-shadow: 0 2px 5px rgba(0,0,0,0.15); border: 1px solid rgba(0,0,0,0.1); white-space: nowrap; pointer-events: none; color: #8b6b3d;}\r\n<\/style>\r\n\r\n<div class=\"ts-vol-calc-wrapper\" style=\"background: #ffffff; padding: 25px; border-radius: 12px; border: 1px solid #e0e0e0; box-shadow: 0 4px 15px rgba(0,0,0,0.05); color: #333; margin-bottom: 20px;\">\r\n    <h3 style=\"color: #2d5a27; margin-top: 0; font-size: 18px; margin-bottom: 15px; font-weight: bold;\">Calculate How Much You Need<\/h3>\r\n\r\n    <div class=\"vis-stage-vol\">\r\n        <div class=\"shape-m3\">\r\n            <div class=\"cube-top cube-face\"><\/div>\r\n            <div class=\"cube-front cube-face\">\r\n                <div class=\"badge-3d-w dim-badge-vol\" style=\"bottom: -32px; left: 50%; transform: translateX(-50%);\"><\/div>\r\n                <div class=\"badge-3d-d dim-badge-vol\" style=\"left: -65px; top: 50%; transform: translateY(-50%);\"><\/div>\r\n            <\/div>\r\n            <div class=\"cube-right cube-face\">\r\n                <div class=\"badge-3d-l dim-badge-vol\" style=\"bottom: -32px; left: 50%; transform: translateX(-50%);\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <span class=\"placeholder-vol\" style=\"color: #aaa; font-size: 14px; font-style: italic;\">Enter dimensions to visualise...<\/span>\r\n    <\/div>\r\n\r\n    <div style=\"display: flex; gap: 15px; margin-bottom: 15px;\">\r\n        <div style=\"flex: 1;\">\r\n            <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Length (metre)<\/label>\r\n            <input type=\"number\" class=\"vol-length\" placeholder=\"0\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <\/div>\r\n        <div style=\"flex: 1;\">\r\n            <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Width (metre)<\/label>\r\n            <input type=\"number\" class=\"vol-width\" placeholder=\"0\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <\/div>\r\n    <\/div>\r\n    <div style=\"margin-bottom: 20px;\">\r\n        <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Desired Depth (millimetre)<\/label>\r\n        <input type=\"number\" class=\"vol-depth\" placeholder=\"e.g. 50\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <p style=\"font-size: 12px; color: #666; margin: 6px 0 0 0; font-style: italic;\">Recommended: 30mm for dressing, 50mm-100mm for beds.<\/p>\r\n    <\/div>\r\n\r\n    <div style=\"background: #f4f8f4; border: 2px solid #2d5a27; padding: 20px; border-radius: 8px; text-align: center;\">\r\n        <span style=\"font-size: 14px; color: #2d5a27; font-weight: 600;\">Order Quantity Updated To:<\/span><br>\r\n        <strong style=\"font-size: 36px; color: #2d5a27; display: block; margin: 5px 0;\"><span class=\"vol-result\">0<\/span> m\u00b3<\/strong>\r\n        \r\n        <p style=\"font-size: 12px; margin: 5px 0 0 0; color: #555;\">(<strong style=\"color: #cc0000;\">Minimum order: 1m\u00b3<\/strong>) &bull; <em>Calculations are rounded up to the next full cubic metre.<\/em><\/p>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\nsetInterval(function() {\r\n    const wrappers = document.querySelectorAll('.ts-vol-calc-wrapper');\r\n    wrappers.forEach(function(wrapper) {\r\n        const inputL = wrapper.querySelector('.vol-length');\r\n        const inputW = wrapper.querySelector('.vol-width');\r\n        const inputD = wrapper.querySelector('.vol-depth');\r\n        if (!inputL || !inputW || !inputD) return;\r\n\r\n        const currL = inputL.value;\r\n        const currW = inputW.value;\r\n        const currD = inputD.value;\r\n\r\n        if (wrapper.dataset.lastL !== currL || wrapper.dataset.lastW !== currW || wrapper.dataset.lastD !== currD) {\r\n            wrapper.dataset.lastL = currL;\r\n            wrapper.dataset.lastW = currW;\r\n            wrapper.dataset.lastD = currD;\r\n\r\n            const l = parseFloat(currL) || 0;\r\n            const w = parseFloat(currW) || 0;\r\n            const d = parseFloat(currD) || 0;\r\n            let total = 0;\r\n\r\n            const shape = wrapper.querySelector('.shape-m3');\r\n            const placeholder = wrapper.querySelector('.placeholder-vol');\r\n            const cTop = wrapper.querySelector('.cube-top');\r\n            const cFront = wrapper.querySelector('.cube-front');\r\n            const cRight = wrapper.querySelector('.cube-right');\r\n            const badgeW = wrapper.querySelector('.badge-3d-w');\r\n            const badgeL = wrapper.querySelector('.badge-3d-l');\r\n            const badgeD = wrapper.querySelector('.badge-3d-d');\r\n\r\n            if (l > 0 && w > 0 && d > 0) {\r\n                if(placeholder) placeholder.style.display = 'none';\r\n                if(shape) shape.style.opacity = '1';\r\n                \r\n                \/\/ Calculates the volume and forces it to round up to the next absolute whole number\r\n                let calculatedVol = Math.ceil(l * w * (d \/ 1000));\r\n                \r\n                \/\/ Forces minimum order constraint\r\n                total = Math.max(1, calculatedVol); \r\n                \r\n                const maxDim = Math.max(l, w);\r\n                const visW = Math.max((w \/ maxDim) * 90, 30); \r\n                const visL = Math.max((l \/ maxDim) * 90, 30); \r\n                const visD = Math.max((d \/ 1000) * 30, 20); \r\n\r\n                if(cTop) {\r\n                    cTop.style.width = visW + 'px';\r\n                    cTop.style.height = visL + 'px';\r\n                    cTop.style.transform = `translate(-50%, -50%) rotateX(90deg) translateZ(${visD \/ 2}px)`;\r\n                }\r\n                if(cFront) {\r\n                    cFront.style.width = visW + 'px';\r\n                    cFront.style.height = visD + 'px';\r\n                    cFront.style.transform = `translate(-50%, -50%) translateZ(${visL \/ 2}px)`;\r\n                }\r\n                if(cRight) {\r\n                    cRight.style.width = visL + 'px';\r\n                    cRight.style.height = visD + 'px';\r\n                    cRight.style.transform = `translate(-50%, -50%) rotateY(90deg) translateZ(${visW \/ 2}px)`;\r\n                }\r\n\r\n                if(badgeW) badgeW.innerText = w + \"m\";\r\n                if(badgeL) badgeL.innerText = l + \"m\";\r\n                if(badgeD) {\r\n                    if(d > 0) { badgeD.style.display = 'block'; badgeD.innerText = d + \"mm\"; }\r\n                    else { badgeD.style.display = 'none'; }\r\n                }\r\n\r\n                document.querySelectorAll('form.cart input.qty').forEach(function(qty) {\r\n                    if(qty.value != total) {\r\n                        qty.value = total;\r\n                        qty.dispatchEvent(new Event('input', {bubbles: true}));\r\n                        qty.dispatchEvent(new Event('change', {bubbles: true}));\r\n                    }\r\n                });\r\n            } else {\r\n                if(placeholder) placeholder.style.display = 'block';\r\n                if(shape) shape.style.opacity = '0';\r\n            }\r\n            \r\n            wrapper.querySelector('.vol-result').innerText = total;\r\n\r\n            document.querySelectorAll('.vol-length').forEach(function(inp) { if(inp.value !== currL) inp.value = currL; });\r\n            document.querySelectorAll('.vol-width').forEach(function(inp) { if(inp.value !== currW) inp.value = currW; });\r\n            document.querySelectorAll('.vol-depth').forEach(function(inp) { if(inp.value !== currD) inp.value = currD; });\r\n            document.querySelectorAll('.vol-result').forEach(function(res) { res.innerText = total; });\r\n        }\r\n    });\r\n}, 250);\r\n<\/script>\n","protected":false},"featured_media":539,"comment_status":"open","ping_status":"closed","template":"","meta":{"_joinchat":[]},"product_brand":[],"product_cat":[19],"product_tag":[],"class_list":{"0":"post-271","1":"product","2":"type-product","3":"status-publish","4":"has-post-thumbnail","6":"product_cat-garden-soils","8":"first","9":"instock","10":"shipping-taxable","11":"purchasable","12":"product-type-simple"},"_links":{"self":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/types\/product"}],"replies":[{"embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/comments?post=271"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/media\/539"}],"wp:attachment":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/media?parent=271"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_brand?post=271"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_cat?post=271"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_tag?post=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}