diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md
index 2047cca..29c04fe 100644
--- a/framework/CHANGELOG.md
+++ b/framework/CHANGELOG.md
@@ -65,6 +65,7 @@ Yii Framework 2 Change Log
 - Enh #3574: Add integrity check support for SQLite (zeeke)
 - Enh #3597: Nested array support for HTML5 custom "data-*" attributes (armab)
 - Enh #3607: Added support for limit in migrations actions: history, new, redo (Ragazzo)
+- Enh #3636: Hide menu container tag with empty items in `yii\widgets\Menu` (arturf)
 - Enh: Added support for using sub-queries when building a DB query with `IN` condition (qiangxue)
 - Enh: Supported adding a new response formatter without the need to reconfigure existing formatters (qiangxue)
 - Enh: Added `yii\web\UrlManager::addRules()` to simplify adding new URL rules (qiangxue)
diff --git a/framework/widgets/Menu.php b/framework/widgets/Menu.php
index c89c658..21128eb 100644
--- a/framework/widgets/Menu.php
+++ b/framework/widgets/Menu.php
@@ -166,9 +166,11 @@ class Menu extends Widget
             $this->params = Yii::$app->request->getQueryParams();
         }
         $items = $this->normalizeItems($this->items, $hasActiveChild);
-        $options = $this->options;
-        $tag = ArrayHelper::remove($options, 'tag', 'ul');
-        echo Html::tag($tag, $this->renderItems($items), $options);
+        if (!empty($items)) {
+            $options = $this->options;
+            $tag = ArrayHelper::remove($options, 'tag', 'ul');
+            echo Html::tag($tag, $this->renderItems($items), $options);
+        }
     }
 
     /**