diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 3b061ce2e6744d4a715736005f4867716e92fa84..41b20a1d9a07faf16a8f46b2c92e3ab8ed98e3e8 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -236,7 +236,7 @@ def page_filter_path(options = {})
   end
 
   def use_startup_css?
-    params[:startup_css] == 'true' || cookies['startup_css'] == 'true'
+    Feature.enabled?(:startup_css) && !Rails.env.test?
   end
 
   def stylesheet_link_tag_defer(path)
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index 4d0959021f50da72562a4f6c80043e991630a5c9..b869298e99da8a188d07a9178da8b5741ffba2e2 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -49,9 +49,7 @@
 
   = favicon_link_tag favicon, id: 'favicon', data: { original_href: favicon }, type: 'image/png'
 
-  - if use_startup_css?
-    %style{ type: "text/css" }
-      = Rails.application.assets_manifest.find_sources('startup/startup-general.css').first.to_s.html_safe
+  = render 'layouts/startup_css'
   - if user_application_theme == 'gl-dark'
     = stylesheet_link_tag_defer "application_dark"
   - else
@@ -61,7 +59,7 @@
 
   = stylesheet_link_tag_defer "highlight/themes/#{user_color_scheme}"
 
-  = render 'layouts/startup_css'
+  = render 'layouts/startup_css_activation'
 
   = Gon::Base.render_data(nonce: content_security_policy_nonce)
 
diff --git a/app/views/layouts/_startup_css.haml b/app/views/layouts/_startup_css.haml
index 0b1cce06f47824d0c0ac7d28ec863f76db583941..094038d39b0c9b8316fb541f26dd87c160b33a70 100644
--- a/app/views/layouts/_startup_css.haml
+++ b/app/views/layouts/_startup_css.haml
@@ -1,7 +1,4 @@
 - return unless use_startup_css?
 
-= javascript_tag nonce: true do
-  :plain
-    document.querySelectorAll('link[media="print"]').forEach(linkTag => {
-      linkTag.addEventListener('load', function() {this.media='all'}, {once: true});
-    })
+%style{ type: "text/css" }
+  = Rails.application.assets_manifest.find_sources('startup/startup-general.css').first.to_s.html_safe
diff --git a/app/views/layouts/_startup_css_activation.haml b/app/views/layouts/_startup_css_activation.haml
new file mode 100644
index 0000000000000000000000000000000000000000..0b1cce06f47824d0c0ac7d28ec863f76db583941
--- /dev/null
+++ b/app/views/layouts/_startup_css_activation.haml
@@ -0,0 +1,7 @@
+- return unless use_startup_css?
+
+= javascript_tag nonce: true do
+  :plain
+    document.querySelectorAll('link[media="print"]').forEach(linkTag => {
+      linkTag.addEventListener('load', function() {this.media='all'}, {once: true});
+    })
diff --git a/config/feature_flags/development/startup_css.yml b/config/feature_flags/development/startup_css.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c87b2abc9a59008575dbe4f5c4fc7277f8c9f769
--- /dev/null
+++ b/config/feature_flags/development/startup_css.yml
@@ -0,0 +1,7 @@
+---
+name: startup_css
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39713
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/238718
+group: group::editor
+type: development
+default_enabled: false