diff --git a/js/entity_browser.modal.js b/js/entity_browser.modal.js
index 920c015..14df0ae 100644
--- a/js/entity_browser.modal.js
+++ b/js/entity_browser.modal.js
@@ -7,6 +7,8 @@
 
   'use strict';
 
+  Drupal.entityBrowserModal = {};
+
   Drupal.AjaxCommands.prototype.select_entities = function (ajax, response, status) {
     var uuid = drupalSettings.entity_browser.modal.uuid;
 
@@ -37,4 +39,81 @@
       });
     }
   };
+
+  /**
+   * Registers behaviours related to modal open and windows resize for fluid modal.
+   */
+  Drupal.behaviors.fluidModal = {
+    attach: function (context) {
+
+      // Recalculate dialog size on window resize.
+      $(window).resize(function (context) {
+        Drupal.entityBrowserModal.fluidDialog();
+      });
+
+      // Catch dialog if opened within a viewport smaller than the dialog width
+      // and recalculate size of all open dialogs.
+      $(document).on('dialogopen', '.ui-dialog', function (event, ui) {
+        Drupal.entityBrowserModal.fluidDialog();
+      });
+
+      // Disable scrolling of the whole browser window to not interfere with the
+      // iframe scrollbar.
+      $(window).on({
+        'dialog:aftercreate': function (event, dialog, $element, settings) {
+          $('body').css({overflow: 'hidden'});
+        },
+        'dialog:beforeclose': function (event, dialog, $element) {
+          $('body').css({overflow: 'inherit'});
+        }
+      });
+    }
+  };
+
+  /**
+   * Recalculates size of the modal.
+   */
+  Drupal.entityBrowserModal.fluidDialog = function () {
+
+    var $visible = $('.ui-dialog:visible');
+    // For each open dialog.
+    $visible.each(function () {
+      var $this = $(this);
+      var dialog = $this.find('.ui-dialog-content').data('ui-dialog');
+      // If fluid option == true.
+      if (dialog.options.fluid) {
+        var wWidth = $(window).width();
+        // Check window width against dialog width.
+        if (wWidth < (dialog.options.maxWidth + 50)) {
+          // If there is a maxWidth, don't allow a bigger size.
+          dialog.option('width', dialog.options.maxWidth);
+        }
+        else {
+          // If no maxWidth is defined, make it responsive.
+          dialog.option('width', '92%');
+        }
+
+        var vHeight = $(window).height();
+        // Check window width against dialog width.
+        if (vHeight < (dialog.options.maxHeight + 50)) {
+          // If there is a maxHeight, don't allow a bigger size.
+          dialog.option('height', dialog.options.maxHeight);
+        }
+        else {
+          // If no maxHeight is defined, make it responsive.
+          dialog.option('height', vHeight - 100);
+
+          // Because there is no iframe height 100% in HTML 5, we have to set
+          // the height of the iframe as well.
+          var contentHeight = $this.find('.ui-dialog-content').height() - 20;
+          $this.find('iframe').css('height', contentHeight);
+        }
+
+        // Reposition dialog.
+        dialog.option('position', dialog.options.position);
+      }
+    });
+  };
+
+
 }(jQuery, Drupal, drupalSettings));
diff --git a/src/Plugin/EntityBrowser/Display/Modal.php b/src/Plugin/EntityBrowser/Display/Modal.php
index bd8e565..e3bd93f 100644
--- a/src/Plugin/EntityBrowser/Display/Modal.php
+++ b/src/Plugin/EntityBrowser/Display/Modal.php
@@ -218,7 +218,7 @@ class Modal extends DisplayBase implements DisplayRouterInterface {
         'width' => '100%',
         'height' => $this->configuration['height'] - 90,
         'frameborder' => 0,
-        'style' => 'padding:',
+        'style' => 'padding:0',
         'name' => Html::cleanCssIdentifier('entity-browser-iframe-' . $this->configuration['entity_browser_id'])
       ],
     ];
@@ -226,8 +226,13 @@ class Modal extends DisplayBase implements DisplayRouterInterface {
 
     $response = new AjaxResponse();
     $response->addCommand(new OpenModalDialogCommand($this->configuration['link_text'], $html, [
-      'width' => $this->configuration['width'],
-      'height' => $this->configuration['height'],
+      'width' => 'auto',
+      'height' => 'auto',
+      'maxWidth' => $this->configuration['width'],
+      'maxHeight' => $this->configuration['height'],
+      'fluid' => 1,
+      'autoResize' => 0,
+      'resizable' => 0,
     ]));
     return $response;
   }
@@ -372,14 +377,14 @@ class Modal extends DisplayBase implements DisplayRouterInterface {
     $form['width'] = [
       '#type' => 'number',
       '#title' => $this->t('Width of the modal'),
-      '#min' => 1,
       '#default_value' => $configuration['width'],
+      '#description' => t('Empty value for responsive width.'),
     ];
     $form['height'] = [
       '#type' => 'number',
       '#title' => $this->t('Height of the modal'),
-      '#min' => 1,
       '#default_value' => $configuration['height'],
+      '#description' => t('Empty value for responsive height.'),
     ];
     $form['link_text'] = [
       '#type' => 'textfield',
