diff --git a/core/modules/outside_in/css/outside_in.module.css b/core/modules/outside_in/css/outside_in.module.css
index 9e36037..35ddfb7 100644
--- a/core/modules/outside_in/css/outside_in.module.css
+++ b/core/modules/outside_in/css/outside_in.module.css
@@ -47,3 +47,12 @@
   width: 100%;
   z-index: -1;
 }
+
+#main-canvas.js-outside-in-edit-mode a,
+#main-canvas.js-outside-in-edit-mode input {
+  pointer-events: none;
+}
+#main-canvas.js-outside-in-edit-mode .contextual-links a {
+  pointer-events: inherit;
+}
+
diff --git a/core/modules/outside_in/js/outside_in.js b/core/modules/outside_in/js/outside_in.js
index a4f94aa..3da21d6 100644
--- a/core/modules/outside_in/js/outside_in.js
+++ b/core/modules/outside_in/js/outside_in.js
@@ -11,6 +11,7 @@
   var toggleEditSelector = '[data-drupal-outsidein="toggle"]';
   var itemsToToggleSelector = '#main-canvas, #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button';
   var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
+  var quickEditItemSelector = '[data-quickedit-entity-id]';
 
   /**
    * Reacts to contextual links being added.
@@ -85,6 +86,20 @@
   }
 
   /**
+   * Disables the QuickEdit module editor if open.
+   */
+  function disableQuickEdit() {
+    $('.quickedit-toolbar button.action-cancel').click();
+  }
+
+  /**
+   * Closes/removes offcanvas.
+   */
+  function closeOffCanvas() {
+    $('.ui-dialog-offcanvas .ui-dialog-titlebar-close').trigger('click');
+  }
+
+  /**
    *  Helper to switch edit mode state.
    *
    * @param {boolean} editMode
@@ -116,8 +131,18 @@
             if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) {
               return;
             }
-
             $(e.currentTarget).find(blockConfigureSelector).trigger('click');
+            disableQuickEdit();
+          });
+        $(quickEditItemSelector)
+          .not(contextualItemsSelector)
+          .on('click.outsidein', function (e) {
+            // Do not trigger if target is quick edit link to avoid loop.
+            if ($(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) {
+              return;
+            }
+            $(e.currentTarget).find('li.quickedit a').trigger('click');
+            closeOffCanvas();
           });
       }
     }
@@ -127,11 +152,12 @@
       if ($editables.length) {
         document.querySelector('#main-canvas').removeEventListener('click', preventClick, true);
         $editables.off('.outsidein');
+        $(quickEditItemSelector).off('.outsidein');
       }
 
       $editButton.text(Drupal.t('Edit'));
-      // Close/remove offcanvas.
-      $('.ui-dialog-offcanvas .ui-dialog-titlebar-close').trigger('click');
+      closeOffCanvas();
+      disableQuickEdit();
     }
     getItemsToToggle().toggleClass('js-outside-in-edit-mode', editMode);
     $('.edit-mode-inactive').toggleClass('visually-hidden', editMode);
diff --git a/core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css b/core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css
new file mode 100644
index 0000000..dc9d72a
--- /dev/null
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css
@@ -0,0 +1,4 @@
+#main-canvas.js-outside-in-edit-mode a,
+#main-canvas.js-outside-in-edit-mode input {
+  pointer-events: inherit !important;
+}
diff --git a/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml
new file mode 100644
index 0000000..c7df21f
--- /dev/null
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml
@@ -0,0 +1,8 @@
+name: 'CSS Test fix'
+type: module
+description: 'Provides CSS fixes for tests.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+- outside_in
diff --git a/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.libraries.yml b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.libraries.yml
new file mode 100644
index 0000000..0fdaffd
--- /dev/null
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.libraries.yml
@@ -0,0 +1,5 @@
+drupal.css_fix:
+  version: VERSION
+  css:
+    theme:
+      css/css_fix.theme.css: {}
diff --git a/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module
new file mode 100644
index 0000000..2cd32e2
--- /dev/null
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @file
+ * Module for attaching CSS during tests.
+ *
+ * CSS pointer-events properties cause testing errors.
+ */
+
+/**
+ * Implements hook_page_attachments().
+ */
+function outside_in_test_css_page_attachments(array &$attachments) {
+  // Unconditionally attach an asset to the page.
+  $attachments['#attached']['library'][] = 'outside_in_test_css/drupal.css_fix';
+}
diff --git a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
index dd79fc2..c72c6b8 100644
--- a/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\outside_in\FunctionalJavascript;
 
+use Drupal\user\Entity\Role;
+
 /**
  * Testing opening and saving block forms in the off-canvas tray.
  *
@@ -22,6 +24,9 @@ class OutsideInBlockFormTest extends OutsideInJavascriptTestBase {
     'outside_in',
     'quickedit',
     'search',
+    // Add test module to override CSS pointer-events properties because they
+    // cause test failures.
+    'outside_in_test_css',
   ];
 
   /**
@@ -97,38 +102,98 @@ public function testBlocks() {
         $web_assert = $this->assertSession();
         $web_assert->pageTextContains($block['new_page_text']);
       }
-
       $this->openBlockForm($block_selector);
-
       $this->toggleEditingMode();
       // Canvas should close when editing module is closed.
       $this->waitForOffCanvasToClose();
-
       // Go into Edit mode again.
       $this->toggleEditingMode();
-
       $element_selector = "$block_selector {$block['element_selector']}";
       // Open block form by clicking a element inside the block.
       // This confirms that default action for links and form elements is
       // suppressed.
       $this->openBlockForm($element_selector);
-
       // Exit edit mode.
       $this->toggleEditingMode();
     }
   }
 
   /**
-   * Enables Editing mode by pressing "Edit" button in the toolbar.
+   * Tests QuickEdit links behavior.
    */
-  protected function toggleEditingMode() {
-    $this->waitForElement('div[data-contextual-id="block:block=powered:langcode=en|outside_in::langcode=en"] .contextual-links a');
+  public function testQuickEditLinks() {
+    $quick_edit_selector = '#quickedit-entity-toolbar';
+    $body_selector = '.field--name-body p';
+    $web_assert = $this->assertSession();
+    // Create a Content type and two test nodes.
+    $this->createContentType(['type' => 'page']);
+    $auth_role = Role::load(Role::AUTHENTICATED_ID);
+    $this->grantPermissions($auth_role, [
+      'edit any page content',
+      'access content',
+    ]);
+    $node = $this->createNode(
+      [
+        'title' => 'Page One',
+        'type' => 'page',
+        'body' => [
+          [
+            'value' => 'Regular NODE body for the test.',
+            'format' => 'plain_text',
+          ],
+        ],
+      ]
+    );
+    $page = $this->getSession()->getPage();
+    // Load the same page twice.
+    foreach ([1, 2] as $page_load_times) {
+      $this->drupalGet('node/' . $node->id());
+      // Waiting for Toolbar module.
+      // @todo Remove the hack after https://www.drupal.org/node/2542050.
+      $this->waitForElement('.toolbar-fixed');
+      // Waiting for Toolbar animation.
+      $this->assertSession()->assertWaitOnAjaxRequest();
+      // The 2nd page load we should already be in edit mode.
+      if ($page_load_times == 1) {
+        $this->toggleEditingMode();
+      }
+      // In Edit mode clicking field should open QuickEdit toolbar.
+      $page->find('css', $body_selector)->click();
+      $this->waitForElement($quick_edit_selector);
+      // Exit Edit mode.
+      $this->toggleEditingMode();
+      // Exiting Edit mode should close QuickEdit toolbar.
+      $web_assert->elementNotExists('css', $quick_edit_selector);
+      // When not in Edit mode  QuickEdit toolbar. should not open.
+      $page->find('css', $body_selector)->click();
+      $web_assert->elementNotExists('css', $quick_edit_selector);
+
+      $block_selector = '#block-powered';
+      // Enter Edit mode.
+      $this->toggleEditingMode();
+      $this->openBlockForm($block_selector);
+      $page->find('css', $body_selector)->click();
+      $this->waitForElement($quick_edit_selector);
+      // Offcanvas should be closed when opening QuickEdit toolbar.
+      $this->waitForOffCanvasToClose();
 
-    $this->waitForElement('#toolbar-bar', 3000);
+      $this->openBlockForm($block_selector);
+      // QuickEdit toolbar should be closed when opening Offcanvas.
+      $web_assert->elementNotExists('css', $quick_edit_selector);
+    }
+  }
 
+  /**
+   * Enables Editing mode by pressing "Edit" button in the toolbar.
+   */
+  protected function toggleEditingMode() {
+    $this->waitForElement('div[data-contextual-id="block:block=powered:langcode=en|outside_in::langcode=en"] .contextual-links a', 10000);
+    // Waiting for QuickEdit icon animation.
+    $this->assertSession()->assertWaitOnAjaxRequest();
     $edit_button = $this->getSession()->getPage()->find('css', '#toolbar-bar div.contextual-toolbar-tab button');
-
     $edit_button->press();
+    // Waiting for Toolbar animation.
+    $this->assertSession()->assertWaitOnAjaxRequest();
   }
 
   /**
@@ -155,4 +220,5 @@ protected function openBlockForm($block_selector) {
     $this->waitForOffCanvasToOpen();
     $this->assertOffCanvasBlockFormIsValid();
   }
+
 }
