diff --git a/IPython/html/widgets/widget_container.py b/IPython/html/widgets/widget_container.py
index 528e42b..f8661fc 100644
--- a/IPython/html/widgets/widget_container.py
+++ b/IPython/html/widgets/widget_container.py
@@ -14,18 +14,27 @@ Represents a container that can be used to group other widgets.
 # Imports
 #-----------------------------------------------------------------------------
 from .widget import DOMWidget
-from IPython.utils.traitlets import Unicode, Tuple, Instance
+from IPython.utils.traitlets import Unicode, Tuple, Instance, TraitError
 
 #-----------------------------------------------------------------------------
 # Classes
 #-----------------------------------------------------------------------------
+
+class TupleOfDOMWidgets(Tuple):
+    """Like Tuple(Instance(DOMWidget)), but without checking length."""
+    def validate_elements(self, obj, value):
+        for v in value:
+            if not isinstance(v, DOMWidget):
+                raise TraitError("Container.children must be DOMWidgets, not %r" % v)
+        return value
+
 class ContainerWidget(DOMWidget):
     _view_name = Unicode('ContainerView', sync=True)
 
     # Keys, all private and managed by helper methods.  Flexible box model
     # classes...
-    children = Tuple(Instance(DOMWidget))
-    _children = Tuple(Instance(DOMWidget), sync=True)
+    children = TupleOfDOMWidgets()
+    _children = TupleOfDOMWidgets(sync=True)
 
     def _children_changed(self, name, old, new):
         """Validate children list.