diff --git a/templates/repo/diff/box.tmpl b/templates/repo/diff/box.tmpl
index 1e79824355..4e6879650d 100644
--- a/templates/repo/diff/box.tmpl
+++ b/templates/repo/diff/box.tmpl
@@ -24,10 +24,10 @@
 					{{svg "octicon-diff" 16 "gt-mr-2"}}{{.locale.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion | Str2html}}
 				</div>
 			</div>
-			<div class="diff-detail-actions gt-df gt-ac">
+			<div class="diff-detail-actions gt-df gt-ac gt-w-100">
 				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
 					<progress id="viewed-files-summary" class="gt-mr-2" value="{{.Diff.NumViewedFiles}}" max="{{.Diff.NumFiles}}"></progress>
-					<label for="viewed-files-summary" id="viewed-files-summary-label" class="gt-mr-3" data-text-changed-template="{{.locale.Tr "repo.pulls.viewed_files_label"}}">
+					<label for="viewed-files-summary" id="viewed-files-summary-label" class="gt-mr-3 gt-f1" data-text-changed-template="{{.locale.Tr "repo.pulls.viewed_files_label"}}">
 						{{.locale.Tr "repo.pulls.viewed_files_label" .Diff.NumViewedFiles .Diff.NumFiles}}
 					</label>
 				{{end}}
diff --git a/templates/repo/diff/new_review.tmpl b/templates/repo/diff/new_review.tmpl
index 8586cd6a56..52aff10e29 100644
--- a/templates/repo/diff/new_review.tmpl
+++ b/templates/repo/diff/new_review.tmpl
@@ -1,11 +1,11 @@
-<div class="ui top right pointing dropdown custom" id="review-box">
-	<div class="ui tiny green button btn-review gt-ml-2 gt-mr-0">
+<div id="review-box">
+	<button class="ui tiny green button gt-ml-2 gt-mr-0 js-btn-review">
 		{{.locale.Tr "repo.diff.review"}}
 		<span class="ui small label review-comments-counter" data-pending-comment-number="{{.PendingCodeCommentNumber}}">{{.PendingCodeCommentNumber}}</span>
 		{{svg "octicon-triangle-down" 14 "dropdown icon"}}
-	</div>
-	<div class="menu review-box">
-		<div class="ui clearing segment">
+	</button>
+	<div class="review-box-panel gt-hidden">
+		<div class="ui segment">
 			<form class="ui form" action="{{.Link}}/reviews/submit" method="post">
 			{{.CsrfTokenHtml}}
 				<input type="hidden" name="commit_id" value="{{.AfterCommitID}}"/>
diff --git a/templates/repo/home.tmpl b/templates/repo/home.tmpl
index 075b859a04..2a79c51ddf 100644
--- a/templates/repo/home.tmpl
+++ b/templates/repo/home.tmpl
@@ -77,7 +77,7 @@
 					<a href="{{.Repository.Link}}/find/{{.BranchNameSubURL}}" class="ui compact basic button">{{.locale.Tr "repo.find_file.go_to_file"}}</a>
 				{{end}}
 				{{if or .CanAddFile .CanUploadFile}}
-					<button class="ui basic small compact dropdown jump icon button gt-mr-2"{{if not .Repository.CanEnableEditor}} disabled{{end}}>
+					<button class="ui basic compact dropdown jump icon button gt-mr-2"{{if not .Repository.CanEnableEditor}} disabled{{end}}>
 						<span class="text">{{.locale.Tr "repo.editor.add_file"}}</span>
 						<div class="menu">
 							{{if .CanAddFile}}
diff --git a/web_src/js/features/common-global.js b/web_src/js/features/common-global.js
index 57a429ed9f..4fa6942467 100644
--- a/web_src/js/features/common-global.js
+++ b/web_src/js/features/common-global.js
@@ -60,6 +60,7 @@ export function initGlobalEnterQuickSubmit() {
 export function initGlobalButtonClickOnEnter() {
   $(document).on('keypress', '.ui.button', (e) => {
     if (e.keyCode === 13 || e.keyCode === 32) { // enter key or space bar
+      if (e.target.nodeName === 'BUTTON') return; // button already handles space&enter correctly
       $(e.target).trigger('click');
       e.preventDefault();
     }
diff --git a/web_src/js/features/repo-issue.js b/web_src/js/features/repo-issue.js
index 7b8705ad2c..4fc8bb5e62 100644
--- a/web_src/js/features/repo-issue.js
+++ b/web_src/js/features/repo-issue.js
@@ -470,7 +470,7 @@ export function initRepoPullRequestReview() {
     assignMenuAttributes(form.find('.menu'));
   });
 
-  const $reviewBox = $('.review-box');
+  const $reviewBox = $('.review-box-panel');
   if ($reviewBox.length === 1) {
     (async () => {
       // the editor's height is too large in some cases, and the panel cannot be scrolled with page now because there is `.repository .diff-detail-box.sticky { position: sticky; }`
@@ -487,12 +487,12 @@ export function initRepoPullRequestReview() {
     return;
   }
 
-  $('.btn-review').on('click', function (e) {
+  $('.js-btn-review').on('click', function (e) {
     e.preventDefault();
-    $(this).closest('.dropdown').find('.menu').toggle('visible'); // eslint-disable-line
-  }).closest('.dropdown').find('.close').on('click', function (e) {
+    toggleElem($(this).parent().find('.review-box-panel'));
+  }).parent().find('.review-box-panel .close').on('click', function (e) {
     e.preventDefault();
-    $(this).closest('.menu').toggle('visible'); // eslint-disable-line
+    hideElem($(this).closest('.review-box-panel'));
   });
 
   $(document).on('click', 'a.add-code-comment', async function (e) {
diff --git a/web_src/less/_base.less b/web_src/less/_base.less
index fc04df4f94..42b18ed1e9 100644
--- a/web_src/less/_base.less
+++ b/web_src/less/_base.less
@@ -2476,24 +2476,13 @@ table th[data-sortt-desc] {
   }
 }
 
-/* fix up SVG dropdown triangles because fomantic thinks they are icon fonts */
-/* see https://github.com/go-gitea/gitea/issues/14014 */
-.ui.dropdown > .dropdown.icon,
-.btn-review > .dropdown.icon {
-  height: auto !important;
-  margin-left: .5rem !important;
-  margin-top: -1px !important;
-  margin-bottom: -1px !important;
-  margin-right: -.5rem !important;
+.ui.dropdown .svg.dropdown.icon,
+.svg.dropdown.icon {
+  margin-top: 0 !important; // reset the "ui.selection.dropdown > .dropdown.icon {margin-top}", for the Issue Dependencies dropdown
+  margin-right: -.5rem !important; // fix up SVG dropdown triangles because Fomantic thinks they are icon fonts
+  height: auto; // reset the ".ui.dropdown > .dropdown.icon {height}", otherwise the icon would be too small
 }
-.ui.button.dropdown > .dropdown.icon,
-.btn-review > .dropdown.icon {
-  float: right !important;
 
-  @media (max-width: 480px) {
-    display: none;
-  }
-}
 .ui.selection.dropdown > .search.icon,
 .ui.selection.dropdown > .delete.icon,
 .ui.selection.dropdown > .dropdown.icon {
diff --git a/web_src/less/_editor.less b/web_src/less/_editor.less
index 73e5bda0a2..d3f9edeb2d 100644
--- a/web_src/less/_editor.less
+++ b/web_src/less/_editor.less
@@ -13,7 +13,7 @@
 }
 
 .editor-toolbar {
-  opacity: 1 !important;
+  max-width: calc(100vw - 80px);
   border-color: var(--color-secondary);
 }
 
diff --git a/web_src/less/_repository.less b/web_src/less/_repository.less
index 3bec5f58fb..627a5f6c2f 100644
--- a/web_src/less/_repository.less
+++ b/web_src/less/_repository.less
@@ -2864,11 +2864,6 @@
   margin-top: 10px;
 }
 
-.repo-button-row .dropdown > .dropdown.icon {
-  margin-left: .25rem !important;
-  margin-right: 0 !important;
-}
-
 .wiki .repo-button-row {
   margin-bottom: 0;
 }
diff --git a/web_src/less/_review.less b/web_src/less/_review.less
index d436bc2490..54392151a1 100644
--- a/web_src/less/_review.less
+++ b/web_src/less/_review.less
@@ -220,47 +220,45 @@ a.blob-excerpt:hover {
 
 // See the comment of createCommentEasyMDE() for the review editor
 // EasyMDE's options can not handle minHeight & maxHeight together correctly, we have to set minHeight in JS code
-#review-box .CodeMirror-scroll {
+.review-box-panel .CodeMirror-scroll {
   min-height: 80px;
   max-height: calc(100vh - 360px);
 }
 
 @media @mediaSm {
-  #review-box > .menu {
-    > .ui.segment {
-      width: 94vw;
-    }
-
-    .editor-toolbar {
-      overflow-x: auto;
-    }
-  }
-
-  #review-box .CodeMirror-scroll {
+  .review-box-panel .CodeMirror-scroll {
     max-width: calc(100vw - 70px);
   }
 }
 
 @media @mediaMd {
-  #review-box .CodeMirror-scroll {
+  .review-box-panel .CodeMirror-scroll {
     max-width: 700px;
   }
 }
 
 @media @mediaLg {
-  #review-box .CodeMirror-scroll {
+  .review-box-panel .CodeMirror-scroll {
     max-width: 800px;
   }
 }
 
 @media @mediaXl {
-  #review-box .CodeMirror-scroll {
+  .review-box-panel .CodeMirror-scroll {
     max-width: 900px;
   }
 }
 
-.review-box > .segment {
-  border: none !important;
+#review-box {
+  position: relative;
+}
+
+.review-box-panel {
+  position: absolute;
+  min-width: max-content;
+  top: 45px;
+  right: -5px;
+  z-index: 2;
 }
 
 #review-box .review-comments-counter {