diff --git a/about/grid-showcase.page.tsx b/about/grid-showcase.page.tsx new file mode 100644 index 0000000000..b95396d8f2 --- /dev/null +++ b/about/grid-showcase.page.tsx @@ -0,0 +1,406 @@ +import { RFC_2822 } from "moment"; +import * as React from "react"; +import { PageGrid, PageGridRow, PageGridCol } from "shared/components/PageGrid/page-grid"; + +export const frontmatter = { + seo: { + title: 'PageGrid Showcase', + description: "A comprehensive showcase and documentation for the PageGrid component system.", + } +}; + +// Demo component with bordered divs to visualize grid +const GridDemo = ({ title, description, children, code }: { + title: string; + description?: string; + children: React.ReactNode; + code?: string; +}) => ( +
+

{title}

+ {description &&

{description}

} + {code && ( +
+
{code}
+
+ )} +
+ {children} +
+
+); + +// Bordered column component for visualization +const BorderedCol = ({ children, ...props }: { children: React.ReactNode } & any) => ( + + {children} + +); + +export default function GridShowcase() { + return ( +
+ + + +
+

PageGrid Component Showcase

+

+ A comprehensive guide to using the PageGrid responsive grid system. + All examples below use bordered divs to visualize the grid structure. +

+
+
+
+ + {/* Basic Grid Structure */} + + + + + Column 1 + Column 2 + +
`} + > + + + span={6} + span={6} + + + + + + + {/* Equal Columns */} + + + + + Column 1 + Column 2 + Column 3 + +`} + > + + + span={4} + span={4} + span={4} + + + + + + + {/* Auto and Fill */} + + + + + Auto + Fill + Auto + +`} + > + + + span="auto" + span="fill" + span="auto" + + + + + + + {/* Responsive Layout */} + + + + + + Responsive Column + + +`} + > + + + + base: 4, md: 6, lg: 4 + + + base: 4, md: 6, lg: 4 + + + base: 4, md: 8, lg: 4 + + + + + + + + {/* Offsets */} + + + + + + Centered (8 columns with 2 offset) + + +`} + > + + + + span={8}, offset: lg: 2 + + + + + + + + {/* Responsive Offsets */} + + + + + + Responsive Offset + + +`} + > + + + + span={6}, offset: base=0, md=3 + + + + + + + + {/* Complex Layout */} + + + + + + Sidebar + + + Main Content + + +`} + > + + + + Sidebar
(base: 4, lg: 4) +
+ + Main Content
(base: 4, lg: 8) +
+
+
+
+
+
+ + {/* Breakpoints Documentation */} + + +
+

Breakpoints

+

+ The PageGrid system uses the following breakpoints: +

+
+ {/* Header */} +
+
Breakpoint
+
Min Width
+
Columns
+
Container Padding
+
+ + {/* Rows */} +
+
base
+
0px
+
4 columns
+
16px
+
+
+
sm
+
576px
+
8 columns
+
24px
+
+
+
md
+
576px
+
8 columns
+
24px
+
+
+
lg
+
992px
+
12 columns
+
32px
+
+
+
xl
+
1280px
+
12 columns
+
112px (max-width: 1440px)
+
+
+
+
+
+ + {/* Usage Documentation */} + + +
+

Usage

+ +

Import

+
+
{`import { PageGrid, PageGridRow, PageGridCol } from "shared/components/PageGrid/page-grid";`}
+
+ +

Basic Example

+
+
{`
+  
+    
+      Column 1
+    
+    
+      Column 2
+    
+  
+`}
+
+ +

Props

+
+
PageGrid.Col Props
+
    +
  • span - Column span (number, "auto", "fill", or responsive object)
  • +
  • offset - Column offset (number or responsive object)
  • +
  • className - Additional CSS classes
  • +
  • All standard HTML div attributes
  • +
+
+ +

Span Values

+
    +
  • Number (e.g., 1-12): Fixed column width
  • +
  • "auto": Column sizes to its content
  • +
  • "fill": Column fills remaining space
  • +
  • Responsive Object: Different spans for different breakpoints
  • +
+ +

Best Practices

+
    +
  • Always wrap columns in a PageGrid.Row
  • +
  • Use responsive values for mobile-first design
  • +
  • Total column spans in a row should not exceed the grid columns (4 for base, 8 for sm/md, 12 for lg/xl)
  • +
  • Use offsets for spacing and centering content
  • +
  • Test layouts at all breakpoints
  • +
+
+
+
+ + {/* Visual Grid Demonstration */} + + +
+

Visual Grid Demonstration

+

+ Below is a visual representation of the 12-column grid system at the lg breakpoint: +

+ + + {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((num) => ( + + {num} + + ))} + + +
+
+
+ +
+ ); +} diff --git a/shared/components/PageGrid/_page-grid.scss b/shared/components/PageGrid/_page-grid.scss index 6c387781ee..8d614aae68 100644 --- a/shared/components/PageGrid/_page-grid.scss +++ b/shared/components/PageGrid/_page-grid.scss @@ -5,12 +5,24 @@ $xrpl-grid-gutter: 8px; +// Custom mixin that accounts for gap spacing in width calculations +@mixin xrpl-make-col($size, $columns) { + flex: 0 0 auto; + // Calculate width accounting for gap spacing + // Formula: width per column * span + gap spacing between spanned columns + // Total gaps in grid: ($columns - 1) + // Total available width: 100% - (gap * total gaps) + // Width per column: available width / columns + // For span of $size: (width per column * size) + (gap * (size - 1)) + width: calc(((100% - (#{$xrpl-grid-gutter} * (#{$columns} - 1))) / #{$columns}) * #{$size} + (#{$xrpl-grid-gutter} * (#{$size} - 1))); +} + @mixin xrpl-grid-generate-cols($columns, $suffix: null) { @for $i from 1 through $columns { $selector: if($suffix, ".xrpl-grid__col-#{$suffix}-#{$i}", ".xrpl-grid__col-#{$i}"); #{$selector} { - @include make-col($i, $columns); + @include xrpl-make-col($i, $columns); } } } @@ -41,6 +53,43 @@ $xrpl-grid-gutter: 8px; } } +// Mixin to generate responsive base column classes (1-12) with built-in breakpoint behavior +@mixin xrpl-grid-generate-responsive-base-cols() { + @for $i from 1 through 12 { + .xrpl-grid__col-#{$i} { + // Base breakpoint (4 columns): if span > 4, clamp to 4 (which gives 4/4 = 100%) + @if $i > 4 { + @include xrpl-make-col(4, 4); + } @else { + @include xrpl-make-col($i, 4); + } + + // SM breakpoint (8 columns): if span > 8, clamp to 8 (which gives 8/8 = 100%) + @include media-breakpoint-up(sm) { + @if $i > 8 { + @include xrpl-make-col(8, 8); + } @else { + @include xrpl-make-col($i, 8); + } + } + + // MD breakpoint (8 columns): if span > 8, clamp to 8 (which gives 8/8 = 100%) + @include media-breakpoint-up(md) { + @if $i > 8 { + @include xrpl-make-col(8, 8); + } @else { + @include xrpl-make-col($i, 8); + } + } + + // LG+ breakpoints (12 columns): always calculate based on 12 cols + @include media-breakpoint-up(lg) { + @include xrpl-make-col($i, 12); + } + } + } +} + .xrpl-grid { &__container { width: 100%; @@ -68,17 +117,26 @@ $xrpl-grid-gutter: 8px; } &__row { - @include make-row($xrpl-grid-gutter); + display: flex; + flex-wrap: wrap; + // Use gap for spacing - works with our calc-based column widths + gap: $xrpl-grid-gutter; } &__col { - @include make-col-ready(); + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + // No padding/margin for gutters - spacing handled by gap on row + // Column widths are calculated to account for gap spacing + // Padding can be added via style prop without affecting grid spacing } } -// Base (0 - 575px) — 4-column grid +// Base (0 - 575px) — 4-column grid with responsive behavior built-in @include xrpl-grid-generate-fill(); -@include xrpl-grid-generate-cols(4); +@include xrpl-grid-generate-responsive-base-cols(); @include xrpl-grid-generate-auto(); @include xrpl-grid-generate-offsets(4); diff --git a/shared/components/PageGrid/page-grid.tsx b/shared/components/PageGrid/page-grid.tsx index 97565b11a8..2af68eac06 100644 --- a/shared/components/PageGrid/page-grid.tsx +++ b/shared/components/PageGrid/page-grid.tsx @@ -99,6 +99,10 @@ const PageGridCol = React.forwardRef((props, r if (baseSpan) { spanClasses.push(classForSpan(null, baseSpan)); + } else { + // If no base span is provided, default to full width (4 columns for base breakpoint) + // This ensures columns are full width on mobile when only larger breakpoints are specified + spanClasses.push(classForSpan(null, 4)); } // Handles sm, md, lg, xl breakpoints (with prefix) diff --git a/static/css/devportal2024-v1.css b/static/css/devportal2024-v1.css index a8c5235107..7e0f23bddc 100644 --- a/static/css/devportal2024-v1.css +++ b/static/css/devportal2024-v1.css @@ -13709,21 +13709,15 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov } } .xrpl-grid__row { - --bs-gutter-x: 8px; - --bs-gutter-y: 0; display: flex; flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-0.5 * var(--bs-gutter-x)); - margin-left: calc(-0.5 * var(--bs-gutter-x)); + gap: 8px; } .xrpl-grid__col { + box-sizing: border-box; flex-shrink: 0; width: 100%; max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); } .xrpl-grid__col { @@ -13732,22 +13726,278 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov .xrpl-grid__col-1 { flex: 0 0 auto; - width: 25%; + width: calc((100% - 8px * (4 - 1)) / 4 * 1 + 8px * (1 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-1 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 1 + 8px * (1 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-1 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 1 + 8px * (1 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-1 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 1 + 8px * (1 - 1)); + } } .xrpl-grid__col-2 { flex: 0 0 auto; - width: 50%; + width: calc((100% - 8px * (4 - 1)) / 4 * 2 + 8px * (2 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-2 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 2 + 8px * (2 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-2 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 2 + 8px * (2 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-2 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 2 + 8px * (2 - 1)); + } } .xrpl-grid__col-3 { flex: 0 0 auto; - width: 75%; + width: calc((100% - 8px * (4 - 1)) / 4 * 3 + 8px * (3 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-3 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 3 + 8px * (3 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-3 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 3 + 8px * (3 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-3 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 3 + 8px * (3 - 1)); + } } .xrpl-grid__col-4 { flex: 0 0 auto; - width: 100%; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-4 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 4 + 8px * (4 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-4 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 4 + 8px * (4 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-4 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 4 + 8px * (4 - 1)); + } +} + +.xrpl-grid__col-5 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-5 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 5 + 8px * (5 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-5 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 5 + 8px * (5 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-5 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 5 + 8px * (5 - 1)); + } +} + +.xrpl-grid__col-6 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-6 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 6 + 8px * (6 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-6 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 6 + 8px * (6 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-6 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 6 + 8px * (6 - 1)); + } +} + +.xrpl-grid__col-7 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-7 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 7 + 8px * (7 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-7 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 7 + 8px * (7 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-7 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 7 + 8px * (7 - 1)); + } +} + +.xrpl-grid__col-8 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-8 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-8 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-8 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 8 + 8px * (8 - 1)); + } +} + +.xrpl-grid__col-9 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-9 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-9 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-9 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 9 + 8px * (9 - 1)); + } +} + +.xrpl-grid__col-10 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-10 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-10 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-10 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 10 + 8px * (10 - 1)); + } +} + +.xrpl-grid__col-11 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-11 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-11 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-11 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 11 + 8px * (11 - 1)); + } +} + +.xrpl-grid__col-12 { + flex: 0 0 auto; + width: calc((100% - 8px * (4 - 1)) / 4 * 4 + 8px * (4 - 1)); +} +@media (min-width: 576px) { + .xrpl-grid__col-12 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 576px) { + .xrpl-grid__col-12 { + flex: 0 0 auto; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); + } +} +@media (min-width: 992px) { + .xrpl-grid__col-12 { + flex: 0 0 auto; + width: calc((100% - 8px * (12 - 1)) / 12 * 12 + 8px * (12 - 1)); + } } .xrpl-grid__col-auto { @@ -13777,35 +14027,35 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov } .xrpl-grid__col-sm-1 { flex: 0 0 auto; - width: 12.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 1 + 8px * (1 - 1)); } .xrpl-grid__col-sm-2 { flex: 0 0 auto; - width: 25%; + width: calc((100% - 8px * (8 - 1)) / 8 * 2 + 8px * (2 - 1)); } .xrpl-grid__col-sm-3 { flex: 0 0 auto; - width: 37.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 3 + 8px * (3 - 1)); } .xrpl-grid__col-sm-4 { flex: 0 0 auto; - width: 50%; + width: calc((100% - 8px * (8 - 1)) / 8 * 4 + 8px * (4 - 1)); } .xrpl-grid__col-sm-5 { flex: 0 0 auto; - width: 62.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 5 + 8px * (5 - 1)); } .xrpl-grid__col-sm-6 { flex: 0 0 auto; - width: 75%; + width: calc((100% - 8px * (8 - 1)) / 8 * 6 + 8px * (6 - 1)); } .xrpl-grid__col-sm-7 { flex: 0 0 auto; - width: 87.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 7 + 8px * (7 - 1)); } .xrpl-grid__col-sm-8 { flex: 0 0 auto; - width: 100%; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); } .xrpl-grid__col-sm-auto { flex: 0 0 auto; @@ -13842,35 +14092,35 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov } .xrpl-grid__col-md-1 { flex: 0 0 auto; - width: 12.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 1 + 8px * (1 - 1)); } .xrpl-grid__col-md-2 { flex: 0 0 auto; - width: 25%; + width: calc((100% - 8px * (8 - 1)) / 8 * 2 + 8px * (2 - 1)); } .xrpl-grid__col-md-3 { flex: 0 0 auto; - width: 37.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 3 + 8px * (3 - 1)); } .xrpl-grid__col-md-4 { flex: 0 0 auto; - width: 50%; + width: calc((100% - 8px * (8 - 1)) / 8 * 4 + 8px * (4 - 1)); } .xrpl-grid__col-md-5 { flex: 0 0 auto; - width: 62.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 5 + 8px * (5 - 1)); } .xrpl-grid__col-md-6 { flex: 0 0 auto; - width: 75%; + width: calc((100% - 8px * (8 - 1)) / 8 * 6 + 8px * (6 - 1)); } .xrpl-grid__col-md-7 { flex: 0 0 auto; - width: 87.5%; + width: calc((100% - 8px * (8 - 1)) / 8 * 7 + 8px * (7 - 1)); } .xrpl-grid__col-md-8 { flex: 0 0 auto; - width: 100%; + width: calc((100% - 8px * (8 - 1)) / 8 * 8 + 8px * (8 - 1)); } .xrpl-grid__col-md-auto { flex: 0 0 auto; @@ -13907,51 +14157,51 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov } .xrpl-grid__col-lg-1 { flex: 0 0 auto; - width: 8.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 1 + 8px * (1 - 1)); } .xrpl-grid__col-lg-2 { flex: 0 0 auto; - width: 16.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 2 + 8px * (2 - 1)); } .xrpl-grid__col-lg-3 { flex: 0 0 auto; - width: 25%; + width: calc((100% - 8px * (12 - 1)) / 12 * 3 + 8px * (3 - 1)); } .xrpl-grid__col-lg-4 { flex: 0 0 auto; - width: 33.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 4 + 8px * (4 - 1)); } .xrpl-grid__col-lg-5 { flex: 0 0 auto; - width: 41.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 5 + 8px * (5 - 1)); } .xrpl-grid__col-lg-6 { flex: 0 0 auto; - width: 50%; + width: calc((100% - 8px * (12 - 1)) / 12 * 6 + 8px * (6 - 1)); } .xrpl-grid__col-lg-7 { flex: 0 0 auto; - width: 58.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 7 + 8px * (7 - 1)); } .xrpl-grid__col-lg-8 { flex: 0 0 auto; - width: 66.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 8 + 8px * (8 - 1)); } .xrpl-grid__col-lg-9 { flex: 0 0 auto; - width: 75%; + width: calc((100% - 8px * (12 - 1)) / 12 * 9 + 8px * (9 - 1)); } .xrpl-grid__col-lg-10 { flex: 0 0 auto; - width: 83.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 10 + 8px * (10 - 1)); } .xrpl-grid__col-lg-11 { flex: 0 0 auto; - width: 91.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 11 + 8px * (11 - 1)); } .xrpl-grid__col-lg-12 { flex: 0 0 auto; - width: 100%; + width: calc((100% - 8px * (12 - 1)) / 12 * 12 + 8px * (12 - 1)); } .xrpl-grid__col-lg-auto { flex: 0 0 auto; @@ -14000,51 +14250,51 @@ h1:hover .hover_anchor, .h1:hover .hover_anchor, h2:hover .hover_anchor, .h2:hov } .xrpl-grid__col-xl-1 { flex: 0 0 auto; - width: 8.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 1 + 8px * (1 - 1)); } .xrpl-grid__col-xl-2 { flex: 0 0 auto; - width: 16.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 2 + 8px * (2 - 1)); } .xrpl-grid__col-xl-3 { flex: 0 0 auto; - width: 25%; + width: calc((100% - 8px * (12 - 1)) / 12 * 3 + 8px * (3 - 1)); } .xrpl-grid__col-xl-4 { flex: 0 0 auto; - width: 33.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 4 + 8px * (4 - 1)); } .xrpl-grid__col-xl-5 { flex: 0 0 auto; - width: 41.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 5 + 8px * (5 - 1)); } .xrpl-grid__col-xl-6 { flex: 0 0 auto; - width: 50%; + width: calc((100% - 8px * (12 - 1)) / 12 * 6 + 8px * (6 - 1)); } .xrpl-grid__col-xl-7 { flex: 0 0 auto; - width: 58.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 7 + 8px * (7 - 1)); } .xrpl-grid__col-xl-8 { flex: 0 0 auto; - width: 66.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 8 + 8px * (8 - 1)); } .xrpl-grid__col-xl-9 { flex: 0 0 auto; - width: 75%; + width: calc((100% - 8px * (12 - 1)) / 12 * 9 + 8px * (9 - 1)); } .xrpl-grid__col-xl-10 { flex: 0 0 auto; - width: 83.33333333%; + width: calc((100% - 8px * (12 - 1)) / 12 * 10 + 8px * (10 - 1)); } .xrpl-grid__col-xl-11 { flex: 0 0 auto; - width: 91.66666667%; + width: calc((100% - 8px * (12 - 1)) / 12 * 11 + 8px * (11 - 1)); } .xrpl-grid__col-xl-12 { flex: 0 0 auto; - width: 100%; + width: calc((100% - 8px * (12 - 1)) / 12 * 12 + 8px * (12 - 1)); } .xrpl-grid__col-xl-auto { flex: 0 0 auto;