diff --git src/wp-admin/css/customize-nav-menus.css src/wp-admin/css/customize-nav-menus.css
index 6fe558d..d815135 100644
--- src/wp-admin/css/customize-nav-menus.css
+++ src/wp-admin/css/customize-nav-menus.css
@@ -72,6 +72,9 @@
 .customize-control-nav_menu_item.has-notifications .menu-item-handle {
 	border-left: 4px solid #00a0d2;
 }
+.customize-control-nav_menu_item.nav-menu-item-inactive .menu-item-bar {
+	opacity: 0.5;
+}
 
 .wp-customizer .menu-item-settings {
 	max-width: 100%;
diff --git src/wp-admin/js/customize-nav-menus.js src/wp-admin/js/customize-nav-menus.js
index b7556f6..0ce325b 100644
--- src/wp-admin/js/customize-nav-menus.js
+++ src/wp-admin/js/customize-nav-menus.js
@@ -1248,15 +1248,24 @@
 				control.onChangeExpanded( expanded, args );
 			});
 			api.Control.prototype.initialize.call( control, id, options );
-			control.active.validate = function() {
-				var value, section = api.section( control.section() );
-				if ( section ) {
-					value = section.active();
-				} else {
-					value = false;
-				}
-				return value;
-			};
+		},
+
+		/**
+		 * Update widget control to indicate whether it is currently rendered.
+		 *
+		 * Overrides api.Control.toggle()
+		 *
+		 * @param {Boolean}   active
+		 * @param {Object}    args
+		 * @param {Function}  args.completeCallback
+		 */
+		onChangeActive: function ( active, args ) {
+			var control = this;
+			// Note: there is a second 'args' parameter being passed, merged on top of this.defaultActiveArguments
+			control.container.toggleClass( 'nav-menu-item-inactive', ! active );
+			if ( args.completeCallback ) {
+				args.completeCallback();
+			}
 		},
 
 		/**
