diff --git a/htdocs/css/openwebrx.css b/htdocs/css/openwebrx.css
index 05cfcbf..c2e87fc 100644
--- a/htdocs/css/openwebrx.css
+++ b/htdocs/css/openwebrx.css
@@ -559,13 +559,11 @@ img.openwebrx-mirror-img
 	border-radius: 5px;
 	height: 100%;
 	width: 100%;
-	position: absolute;
-	left: -100%;
-	transition-property: left,background-color;
+	transition-property: transform, background-color;
 	transition-duration: 1s;
 	transition-timing-function: ease-in-out;
-	transform: translateZ(0);
-	will-change: left;
+	transform: translate(-100%) translateZ(0);
+	will-change: transform, background-color;
 }
 
 .openwebrx-progressbar--over .openwebrx-progressbar-bar {
@@ -678,8 +676,7 @@ img.openwebrx-mirror-img
     }
 }
 
-#openwebrx-smeter-outer
-{
+#openwebrx-smeter {
 	border-color: #888;
 	border-style: solid;
 	border-width: 0px;
@@ -687,16 +684,20 @@ img.openwebrx-mirror-img
 	height: 7px;
 	background-color: #373737;
 	border-radius: 3px;
-	position: relative;
+	overflow: hidden;
 }
-#openwebrx-smeter-bar
-{
-	transition: all 0.2s linear;
-	width: 0px;
-	height: 7px;
+
+.openwebrx-smeter-bar {
+	transition-property: transform;
+	transition-duration: 0.2s;
+	transition-timing-function: linear;
+	will-change: transform;
+	transform: translate(-100%) translateZ(0);
+	width: 100%;
+	height: 100%;
 	background: linear-gradient(to top, #ff5939 , #961700);
-	position: absolute;
-	margin: 0; padding: 0; left: 0;
+	margin: 0;
+	padding: 0;
 	border-radius: 3px;
 }
 
diff --git a/htdocs/index.html b/htdocs/index.html
index 21dd986..3932923 100644
--- a/htdocs/index.html
+++ b/htdocs/index.html
@@ -151,8 +151,8 @@
                     
0 dB
                 
                 
diff --git a/htdocs/lib/ProgressBar.js b/htdocs/lib/ProgressBar.js
index 71b1754..9b791ad 100644
--- a/htdocs/lib/ProgressBar.js
+++ b/htdocs/lib/ProgressBar.js
@@ -18,7 +18,7 @@ ProgressBar.prototype.set = function(val, text, over) {
 ProgressBar.prototype.setValue = function(val) {
     if (val < 0) val = 0;
     if (val > 1) val = 1;
-    this.$innerBar.css({left: (val - 1) * 100 + '%'});
+    this.$innerBar.css({transform: 'translate(' + ((val - 1) * 100) + '%) translateZ(0)'});
 };
 
 ProgressBar.prototype.setText = function(text) {
diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js
index 594f0b5..05bce97 100644
--- a/htdocs/openwebrx.js
+++ b/htdocs/openwebrx.js
@@ -151,13 +151,19 @@ function waterfallColorsContinuous(levels) {
 function setSmeterRelativeValue(value) {
     if (value < 0) value = 0;
     if (value > 1.0) value = 1.0;
-    var bar = e("openwebrx-smeter-bar");
-    var outer = e("openwebrx-smeter-outer");
-    bar.style.width = (outer.offsetWidth * value).toString() + "px";
-    var bgRed = "linear-gradient(to top, #ff5939 , #961700)";
-    var bgGreen = "linear-gradient(to top, #22ff2f , #008908)";
-    var bgYellow = "linear-gradient(to top, #fff720 , #a49f00)";
-    bar.style.background = (value > 0.9) ? bgRed : ((value > 0.7) ? bgYellow : bgGreen);
+    var $meter = $("#openwebrx-smeter");
+    var $bar = $meter.find(".openwebrx-smeter-bar");
+    $bar.css({transform: 'translate(' + ((value - 1) * 100) + '%) translateZ(0)'});
+    if (value > 0.9) {
+        // red
+        $bar.css({background: 'linear-gradient(to top, #ff5939 , #961700)'});
+    } else if (value > 0.7) {
+        // yellow
+        $bar.css({background: 'linear-gradient(to top, #fff720 , #a49f00)'});
+    } else {
+        // red
+        $bar.css({background: 'linear-gradient(to top, #22ff2f , #008908)'});
+    }
 }
 
 function setSquelchSliderBackground(val) {