diff --git a/cypress/e2e/timeline/timeline.spec.ts b/cypress/e2e/timeline/timeline.spec.ts
index 490e4e9bc9..8d9d8afbd2 100644
--- a/cypress/e2e/timeline/timeline.spec.ts
+++ b/cypress/e2e/timeline/timeline.spec.ts
@@ -714,6 +714,12 @@ describe("Timeline", () => {
             cy.visit("/#/room/" + roomId);
 
             cy.get(".mx_RoomHeader").findByRole("button", { name: "Search" }).click();
+
+            cy.get(".mx_SearchBar").percySnapshotElement("Search bar on the timeline", {
+                // Emulate narrow timeline
+                widths: [320, 640],
+            });
+
             cy.get(".mx_SearchBar_input input").type("Message{enter}");
 
             cy.get(".mx_EventTile:not(.mx_EventTile_contextual) .mx_EventTile_searchHighlight").should("exist");
diff --git a/res/css/views/rooms/_SearchBar.pcss b/res/css/views/rooms/_SearchBar.pcss
index 9bde17a71c..fc0acfb5f1 100644
--- a/res/css/views/rooms/_SearchBar.pcss
+++ b/res/css/views/rooms/_SearchBar.pcss
@@ -15,22 +15,33 @@ limitations under the License.
 */
 
 .mx_SearchBar {
-    height: 56px;
+    /* use `min-height` rather than height, to allow room for the text to wrap if the window is narrow */
+    min-height: 56px;
     display: flex;
     align-items: center;
     border-bottom: 1px solid $primary-hairline-color;
 
     .mx_SearchBar_input {
+        --size-button-search: 37px; /* size of the search button inside `input` element */
+
         /* border: 1px solid $input-border-color; */
         /* font-size: $font-15px; */
         flex: 1 1 0;
         margin-left: 22px;
+
+        /* do not allow the input element to shrink below the width needed for the placeholder 'Search…'
+           and the search button */
+        min-width: calc(7em + var(--size-button-search));
+
+        input {
+            box-sizing: border-box; /* include padding value into width calculation */
+        }
     }
 
     .mx_SearchBar_searchButton {
         cursor: pointer;
-        width: 37px;
-        height: 37px;
+        width: var(--size-button-search);
+        height: var(--size-button-search);
         background-color: $accent;
         mask: url("$(res)/img/feather-customised/search-input.svg");
         mask-repeat: no-repeat;
@@ -38,7 +49,8 @@ limitations under the License.
     }
 
     .mx_SearchBar_buttons {
-        display: inherit;
+        display: inherit; /* flex */
+        min-width: 0; /* have the close button displayed even on a very narrow timeline */
     }
 
     .mx_SearchBar_button {
@@ -50,6 +62,7 @@ limitations under the License.
         color: $primary-content;
         border-bottom: 2px solid $accent;
         font-weight: var(--font-semi-bold);
+        word-break: break-all; /* prevent the input area and cancel button from being overlapped by BaseCard */
     }
 
     .mx_SearchBar_unselected {