
By default, the WordPress Customizer sidebar has a fixed width, which can make previewing responsive designs or large screens cumbersome.
If you’ve ever wanted to resize the Customizer sidebar — just like a draggable panel in a modern design app — you’re in luck.
In this guide, you’ll learn how to make your Customizer sidebar resizable, with persistent width, smooth transitions, and even keyboard shortcuts using PHP and jQuery.
Step 1: Add the Sidebar Resizer Script
Add this PHP snippet to your theme’s functions.php file or a dedicated inc/customizer-sidebar-resizer.php file:
<?php
function ultra_nutrition_customizer_sidebar_resizer() {
	?>
	<script>
		(function($) {
			'use strict';
			$(document).ready(function() {
				const MIN_WIDTH = 250;
				const MAX_WIDTH = 600;
				const DEFAULT_WIDTH = 300;
				const STORAGE_KEY = 'customizerSidebarWidth';
				let isResizing = false;
				let startX = 0;
				let startWidth = 0;
				const savedWidth = parseInt(localStorage.getItem(STORAGE_KEY)) || DEFAULT_WIDTH;
				const $sidebar = $('.wp-full-overlay-sidebar');
				const $overlay = $('.wp-full-overlay');
				const $main = $('.wp-full-overlay-main');
				$sidebar.append('<div class="customizer-resize-handle" title="Drag to resize sidebar"></div>');
				const $handle = $('.customizer-resize-handle');
				applySidebarWidth(savedWidth);
				$handle.on('mousedown', function(e) {
					e.preventDefault();
					isResizing = true;
					startX = e.clientX;
					startWidth = $sidebar.width();
					$('body').addClass('customizer-resizing');
					$main.css('pointer-events', 'none');
				});
				$(document).on('mousemove', function(e) {
					if (!isResizing) return;
					const deltaX = e.clientX - startX;
					let newWidth = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, startWidth + deltaX));
					applySidebarWidth(newWidth);
					$handle.attr("data-width", newWidth + "px");
				});
				$(document).on('mouseup', function() {
					if (!isResizing) return;
					isResizing = false;
					$('body').removeClass('customizer-resizing');
					$main.css('pointer-events', '');
					const finalWidth = $sidebar.width();
					localStorage.setItem(STORAGE_KEY, finalWidth);
				});
				$(document).on('click', '.collapse-sidebar', function() {
					setTimeout(function() {
						const currentWidth = parseInt(localStorage.getItem(STORAGE_KEY)) || DEFAULT_WIDTH;
						applySidebarWidth(currentWidth);
					}, 50);
				});
				$(window).on('resize', function() {
					if (!isResizing) {
						const currentWidth = parseInt(localStorage.getItem(STORAGE_KEY)) || DEFAULT_WIDTH;
						applySidebarWidth(currentWidth);
					}
				});
				function applySidebarWidth(width) {
					width = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, width));
					$sidebar.css('width', width + 'px');
					$overlay.filter('.expanded').css('margin-left', width + 'px');
				}
				$handle.on('dblclick', function() {
					applySidebarWidth(DEFAULT_WIDTH);
					localStorage.setItem(STORAGE_KEY, DEFAULT_WIDTH);
				});
			});
		})(jQuery);
	</script>
	<style>
		.customizer-resize-handle {
			position: absolute;
			top: 0;
			right: -4px;
			width: 8px;
			height: 100%;
			cursor: col-resize;
			background: transparent;
			z-index: 99999;
			transition: all 0.2s ease;
		}
		.customizer-resize-handle:hover::before {
			opacity: 1;
		}
		.customizer-resize-handle::before {
			content: '';
			position: absolute;
			top: 50%;
			left: 50%;
			transform: translate(-50%, -50%);
			width: 3px;
			height: 30px;
			background: rgba(0, 0, 0, 0.1);
			border-radius: 2px;
			opacity: 0;
			transition: opacity 0.2s ease;
		}
		.customizer-resizing {
			cursor: col-resize !important;
			user-select: none !important;
		}
	</style>
	<?php
}
add_action( 'customize_controls_print_footer_scripts', 'ultra_nutrition_customizer_sidebar_resizer' );
Step 2: Improve User Experience (Optional Enhancements) Add Keyboard Shortcuts
To make resizing even smoother, allow users to use Ctrl + + / - / 0:
$(document).on("keydown", function (e) {
	if (!$sidebar.is(":hover")) return;
	if (e.ctrlKey || e.metaKey) {
		let currentWidth = $sidebar.width();
		if (e.key === "=" || e.key === "+") {
			applySidebarWidth(currentWidth + 10);
			localStorage.setItem(STORAGE_KEY, currentWidth + 10);
		} else if (e.key === "-") {
			applySidebarWidth(currentWidth - 10);
			localStorage.setItem(STORAGE_KEY, currentWidth - 10);
		} else if (e.key === "0") {
			applySidebarWidth(DEFAULT_WIDTH);
			localStorage.setItem(STORAGE_KEY, DEFAULT_WIDTH);
		}
	}
});
Step 3: Why This Improves the Customizer
This small addition enhances developer and user experience:
- ✅ Persistent width: Sidebar remembers the last size between sessions.
- ✅ Better usability: More room to view long Customizer labels or controls.
- ✅ Smooth animations: CSS transitions make resizing feel natural.
- ✅ Double-click reset: Quickly revert to default width.
- ✅ Accessibility-friendly: Optional keyboard shortcuts.
For reference, explore the WordPress Customizer Developer Handbook for other UI customizations.
Bonus: Add Tooltip Showing Width
You can add a small tooltip showing the current width while resizing:
$handle.attr("data-width", newWidth + "px");
Then style it:
.customizer-resize-handle::after {
	content: attr(data-width);
	position: absolute;
	top: 50%;
	right: 15px;
	transform: translateY(-50%);
	background: rgba(0, 0, 0, 0.8);
	color: white;
	padding: 4px 8px;
	border-radius: 3px;
	font-size: 11px;
	opacity: 0;
	transition: opacity 0.2s ease;
}
.customizer-resizing .customizer-resize-handle::after {
	opacity: 1;
}
Relevant Resources
- 📘 WordPress Customizer API — Learn how the Customizer works.
- 🧩 jQuery API Documentation — Useful for DOM manipulation and event handling.
- 🧠 LocalStorage MDN Docs — For persisting sidebar width between sessions.
- 💻 CSS Transitions Guide (MDN) — For smooth animations.
Final Thoughts
This sidebar resizer adds a modern, user-friendly improvement to the WordPress Customizer.
Whether you’re developing client themes or working on your own framework, it’s a great touch that makes customization more intuitive — especially on large screens.
For even more Customizer enhancements, check out:
- How to Use the TinyMCE WYSIWYG Editor in WordPress Customizer
- How to Add Export/Import Functionality for WordPress Customizer Settings
Quick Summary
| Feature | Description | 
|---|---|
| Resizable Sidebar | Drag or use keyboard shortcuts | 
| Persistent Width | Saved via LocalStorage | 
| UX Enhancements | Smooth transitions, reset option | 
| Tech Stack | PHP + jQuery + CSS | 
| Docs | WordPress Customizer Handbook | 

 
			