From f7e9c3caf356e27f03ba85c34851536effcea3fa Mon Sep 17 00:00:00 2001
From: Benjamin Kott <benjamin.kott@outlook.com>
Date: Tue, 10 Sep 2024 20:07:15 +0200
Subject: [PATCH] [TASK] Move card-container to container queries
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Resolves: #104880
Releases: main
Change-Id: Ibd6cf85648d6c6642281d9a879d8a314c8bbc097
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/85990
Tested-by: Frank Nägler <frank.naegler@typo3.com>
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Frank Nägler <frank.naegler@typo3.com>
Tested-by: Benni Mack <benni@typo3.org>
---
 Build/Sources/Sass/_minimal.scss              |  1 +
 Build/Sources/Sass/component/_card.scss       | 27 ++++++++++----
 Build/Sources/Sass/mixins/_container.scss     | 20 ++++++++++
 .../backend/Resources/Public/Css/backend.css  | 37 +++++++++++++------
 4 files changed, 67 insertions(+), 18 deletions(-)
 create mode 100644 Build/Sources/Sass/mixins/_container.scss

diff --git a/Build/Sources/Sass/_minimal.scss b/Build/Sources/Sass/_minimal.scss
index 1551ccae5340..3e82801dfdaa 100644
--- a/Build/Sources/Sass/_minimal.scss
+++ b/Build/Sources/Sass/_minimal.scss
@@ -22,6 +22,7 @@
 @import "../../node_modules/bootstrap/scss/maps";
 @import "../../node_modules/bootstrap/scss/mixins";
 @import "mixins/collection";
+@import "mixins/container";
 @import "../../node_modules/bootstrap/scss/utilities";
 
 // Layout & components
diff --git a/Build/Sources/Sass/component/_card.scss b/Build/Sources/Sass/component/_card.scss
index 4c2aee3efe6e..3ba0eb82948a 100644
--- a/Build/Sources/Sass/component/_card.scss
+++ b/Build/Sources/Sass/component/_card.scss
@@ -232,6 +232,7 @@
 }
 
 .card-container {
+    container-type: inline-size;
     display: flex;
     flex-wrap: wrap;
     gap: var(--typo3-card-grid-gap) 0;
@@ -255,18 +256,26 @@
     width: calc(100% - var(--typo3-card-grid-gap));
 }
 
-.card-size-small {
-    @include media-breakpoint-up('md') {
+//
+// Small
+//
+@include container-breakpoint-up('md') {
+    .card-size-small {
         width: calc(50% - var(--typo3-card-grid-gap));
     }
+}
 
-    @include media-breakpoint-up('lg') {
+@include container-breakpoint-up('lg') {
+    .card-size-small {
         width: calc(25% - var(--typo3-card-grid-gap));
     }
 }
 
-.card-size-medium {
-    @include media-breakpoint-up('md') {
+//
+// Medium
+//
+@include container-breakpoint-up('md') {
+    .card-size-medium {
         width: calc(50% - var(--typo3-card-grid-gap));
     }
 }
@@ -276,12 +285,16 @@
 //
 .card-size-fixed-small {
     width: calc(100% - var(--typo3-card-grid-gap));
+}
 
-    @include media-breakpoint-up('sm') {
+@include container-breakpoint-up('sm') {
+    .card-size-fixed-small {
         width: calc(50% - var(--typo3-card-grid-gap));
     }
+}
 
-    @include media-breakpoint-up('md') {
+@include container-breakpoint-up('md') {
+    .card-size-fixed-small {
         width: 300px;
     }
 }
diff --git a/Build/Sources/Sass/mixins/_container.scss b/Build/Sources/Sass/mixins/_container.scss
new file mode 100644
index 000000000000..7149bc5e8005
--- /dev/null
+++ b/Build/Sources/Sass/mixins/_container.scss
@@ -0,0 +1,20 @@
+//
+// Container
+// =========
+//
+@mixin container-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
+    $min: breakpoint-min($name, $breakpoints);
+
+    @if $min {
+        /* clean-css ignore:start */
+        @container (min-width: #{$min}) {
+            @content;
+        }
+
+        /* clean-css ignore:end */
+    }
+
+    @else {
+        @content;
+    }
+}
diff --git a/typo3/sysext/backend/Resources/Public/Css/backend.css b/typo3/sysext/backend/Resources/Public/Css/backend.css
index 131c9007986a..2582be0ec549 100644
--- a/typo3/sysext/backend/Resources/Public/Css/backend.css
+++ b/typo3/sysext/backend/Resources/Public/Css/backend.css
@@ -3459,24 +3459,39 @@ typo3-backend-form-selecttree-toolbar{display:block}
 .card{--typo3-card-color:var(--typo3-text-color-base);--typo3-card-color-subtle:var(--typo3-text-color-variant);--typo3-card-bg:var(--typo3-surface-container-low);--typo3-card-border-radius:var(--typo3-component-border-radius);--typo3-card-border-color:color-mix(in srgb, var(--typo3-card-bg), var(--typo3-card-color) 15%);color:var(--typo3-card-color);background:var(--typo3-card-bg);border:1px solid var(--typo3-card-border-color);border-radius:var(--typo3-card-border-radius);box-shadow:var(--typo3-component-box-shadow);position:relative;display:flex;flex-direction:column;overflow:hidden;margin-bottom:var(--typo3-spacing);transition:all .2s ease-in-out;transition-property:box-shadow,border,transform}
 .card .table-fit{box-shadow:none;border-radius:0;border-left:0;border-right:0;border-bottom:0;margin-bottom:0}
 .card .table-fit:not(:first-child){margin-top:var(--typo3-card-padding)}
-.card-container{display:flex;flex-wrap:wrap;gap:var(--typo3-card-grid-gap) 0;margin-left:calc(var(--typo3-card-grid-gap)/ 2 * -1);margin-right:calc(var(--typo3-card-grid-gap)/ 2 * -1);margin-bottom:var(--typo3-spacing)}
+.card-container{container-type:inline-size;display:flex;flex-wrap:wrap;gap:var(--typo3-card-grid-gap) 0;margin-left:calc(var(--typo3-card-grid-gap)/ 2 * -1);margin-right:calc(var(--typo3-card-grid-gap)/ 2 * -1);margin-bottom:var(--typo3-spacing)}
 .card-container .card{margin-left:calc(var(--typo3-card-grid-gap)/ 2);margin-right:calc(var(--typo3-card-grid-gap)/ 2);margin-bottom:0}
 .card-size-large,.card-size-medium,.card-size-small{width:calc(100% - var(--typo3-card-grid-gap))}
-@media (min-width:768px){
-.card-size-small{width:calc(50% - var(--typo3-card-grid-gap))}
+
+@container (min-width: 768px) {
+  .card-size-small {
+    width: calc(50% - var(--typo3-card-grid-gap));
+  }
 }
-@media (min-width:992px){
-.card-size-small{width:calc(25% - var(--typo3-card-grid-gap))}
+
+@container (min-width: 992px) {
+  .card-size-small {
+    width: calc(25% - var(--typo3-card-grid-gap));
+  }
 }
-@media (min-width:768px){
-.card-size-medium{width:calc(50% - var(--typo3-card-grid-gap))}
+
+@container (min-width: 768px) {
+  .card-size-medium {
+    width: calc(50% - var(--typo3-card-grid-gap));
+  }
 }
 .card-size-fixed-small{width:calc(100% - var(--typo3-card-grid-gap))}
-@media (min-width:576px){
-.card-size-fixed-small{width:calc(50% - var(--typo3-card-grid-gap))}
+
+@container (min-width: 576px) {
+  .card-size-fixed-small {
+    width: calc(50% - var(--typo3-card-grid-gap));
+  }
 }
-@media (min-width:768px){
-.card-size-fixed-small{width:300px}
+
+@container (min-width: 768px) {
+  .card-size-fixed-small {
+    width: 300px;
+  }
 }
 .card-body,.card-footer,.card-header,.card-image{padding:var(--typo3-card-padding) var(--typo3-card-padding) 0 var(--typo3-card-padding)}
 .card-body:last-child,.card-footer:last-child,.card-header:last-child,.card-image:last-child{padding-bottom:var(--typo3-card-padding)}
-- 
GitLab