diff --git a/src/core/search/components/search-box/core-search-box.html b/src/core/search/components/search-box/core-search-box.html
index be186a40b..58b13bb4c 100644
--- a/src/core/search/components/search-box/core-search-box.html
+++ b/src/core/search/components/search-box/core-search-box.html
@@ -1,7 +1,7 @@
 <ion-card>
     <form #f="ngForm" (ngSubmit)="submitForm($event)" role="search" #searchForm>
         <ion-item>
-            <ion-input type="search" name="search" [(ngModel)]="searchText" [placeholder]="placeholder" [autocorrect]="autocorrect" [spellcheck]="spellcheck" [core-auto-focus]="autoFocus" [disabled]="disabled" role="searchbox" (focus)="showHistory()" (blur)="hideHistory()"></ion-input>
+            <ion-input type="search" name="search" [(ngModel)]="searchText" [placeholder]="placeholder" [autocorrect]="autocorrect" [spellcheck]="spellcheck" [core-auto-focus]="autoFocus" [disabled]="disabled" role="searchbox"></ion-input>
             <button item-end ion-button clear icon-only type="submit" class="button-small" [attr.aria-label]="searchLabel" [disabled]="disabled || !searchText || (searchText.length < lengthCheck)">
                 <ion-icon name="search"></ion-icon>
             </button>
@@ -9,13 +9,11 @@
                 <ion-icon name="close"></ion-icon>
             </button>
         </ion-item>
-        <div class="core-search-history" *ngIf="historyShown && history.length">
-            <ion-list class="with-borders">
-                <ion-item text-wrap *ngFor="let item of history" (mousedown)="itemMouseDown($event, item.searchedtext)" (mouseup)="itemMouseUp($event, item.searchedtext)" class="core-clickable">
-                    <core-icon name="fa-history" item-start></core-icon>
-                    {{item.searchedtext}}
-                </ion-item>
-            </ion-list>
-        </div>
+        <ion-list class="core-search-history with-borders">
+            <a ion-item text-wrap *ngFor="let item of history" (click)="historyClicked($event, item.searchedtext)" class="core-clickable" tabindex="1">
+                <core-icon name="fa-history" item-start></core-icon>
+                {{item.searchedtext}}
+            </a>
+        </ion-list>
     </form>
 </ion-card>
diff --git a/src/core/search/components/search-box/search-box.scss b/src/core/search/components/search-box/search-box.scss
index 58eab7287..a800669ef 100644
--- a/src/core/search/components/search-box/search-box.scss
+++ b/src/core/search/components/search-box/search-box.scss
@@ -22,12 +22,8 @@ ion-app.app-root core-search-box {
         padding-left: 0 !important;
     }
 
-    .item-wp .text-input {
-        border: 0;
-        margin: 0;
-    }
-
     .core-search-history {
+        display: none;
         max-height: calc(-120px + 80vh);
         overflow-y: auto;
 
@@ -39,4 +35,10 @@ ion-app.app-root core-search-box {
             border-bottom: 0;
         }
     }
+
+    form:focus-within {
+        .core-search-history {
+            display: block;
+        }
+    }
 }
diff --git a/src/core/search/components/search-box/search-box.ts b/src/core/search/components/search-box/search-box.ts
index 2826043a1..f41742eab 100644
--- a/src/core/search/components/search-box/search-box.ts
+++ b/src/core/search/components/search-box/search-box.ts
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
+import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';
 import { TranslateService } from '@ngx-translate/core';
 import { CoreEventsProvider } from '@providers/events';
 import { CoreSitesProvider } from '@providers/sites';
@@ -34,7 +34,7 @@ import { CoreSearchHistoryProvider, CoreSearchHistoryItem } from '../../provider
     selector: 'core-search-box',
     templateUrl: 'core-search-box.html'
 })
-export class CoreSearchBoxComponent implements OnInit, OnDestroy {
+export class CoreSearchBoxComponent implements OnInit {
     @Input() searchLabel?: string; // Label to be used on action button.
     @Input() placeholder?: string; // Placeholder text for search text input.
     @Input() autocorrect = 'on'; // Enables/disable Autocorrection on search text input.
@@ -57,9 +57,6 @@ export class CoreSearchBoxComponent implements OnInit, OnDestroy {
     history: CoreSearchHistoryItem[] = [];
     historyShown = false;
 
-    protected elementClicked = '';
-    protected backdropMouseUpFunc;
-
     constructor(protected translate: TranslateService,
             protected utils: CoreUtilsProvider,
             protected searchHistoryProvider: CoreSearchHistoryProvider,
@@ -80,8 +77,6 @@ export class CoreSearchBoxComponent implements OnInit, OnDestroy {
 
         if (this.searchArea) {
             this.loadHistory();
-
-            this.backdropMouseUpFunc = this.backdropMouseUp.bind(this);
         }
     }
 
@@ -132,72 +127,17 @@ export class CoreSearchBoxComponent implements OnInit, OnDestroy {
         this.history = await this.searchHistoryProvider.getSearchHistory(this.searchArea);
     }
 
-    /**
-     * Show search history.
-     */
-    showHistory(): void {
-        if (this.searchArea) {
-            this.historyShown = true;
-            this.elementClicked = '';
-            document.body.addEventListener('mouseup', this.backdropMouseUpFunc);
-        }
-    }
-
-    /**
-     * Hide search history.
-     *
-     * @param force: If force hidding the history without checking the clicked element.
-     */
-    hideHistory(force: boolean = false): void {
-        if (this.searchArea && (force || this.elementClicked == '')) {
-            this.historyShown = false;
-            this.elementClicked = '';
-
-            document.body.removeEventListener('mouseup', this.backdropMouseUpFunc);
-        }
-    }
-
-    /**
-     * Saves the item where you moused down.
-     * It uses mouseup/down because blur will block the click event.
-     *
-     * @param e Event.
-     * @param text Selected text.
-     */
-    itemMouseDown(e: Event, text: string): void {
-        this.elementClicked = text;
-    }
-
     /**
      * Select an item and use it for search text.
-     * It uses mouseup/down because blur will block the click event.
      *
      * @param e Event.
      * @param text Selected text.
      */
-    itemMouseUp(e: Event, text: string): void {
-        if (this.elementClicked == text) {
-            this.hideHistory(true);
-            if (this.searched != text) {
-                this.searchText = text;
-                this.submitForm(e);
-            }
+    historyClicked(e: Event, text: string): void {
+        if (this.searched != text) {
+            this.searchText = text;
+            this.submitForm(e);
         }
-        this.elementClicked = '';
-    }
-
-    /**
-     * Manages mouseup out of the history.
-     *
-     * @param e Event.
-     */
-    backdropMouseUp(e: Event): void {
-        // Do not hide if the search box is focused.
-        if (document.activeElement['type'] && document.activeElement['type'] == 'search') {
-            return;
-        }
-        this.hideHistory();
-        this.elementClicked = '';
     }
 
     /**
@@ -206,16 +146,6 @@ export class CoreSearchBoxComponent implements OnInit, OnDestroy {
     clearForm(): void {
         this.searched = '';
         this.searchText = '';
-        this.hideHistory(true);
         this.onClear.emit();
     }
-
-    /**
-     * On destroy of the component, clear up any listeners.
-     */
-    ngOnDestroy(): void {
-        if (this.backdropMouseUpFunc) {
-            document.body.removeEventListener('mouseup', this.backdropMouseUpFunc);
-        }
-    }
 }