diff --git a/packages/main/src/RangeSlider.ts b/packages/main/src/RangeSlider.ts index b5f349cc6752..66e47b6ad997 100644 --- a/packages/main/src/RangeSlider.ts +++ b/packages/main/src/RangeSlider.ts @@ -953,13 +953,6 @@ class RangeSlider extends SliderBase implements IFormInputElement { endHandle: { [this.directionStart]: `${this._secondHandlePositionFromStart!}%`, }, - label: { - "width": `${this._labelWidth}%`, - }, - labelContainer: { - "width": `100%`, - [this.directionStart]: `-${this._labelWidth / 2}%`, - }, }; } } diff --git a/packages/main/src/Slider.ts b/packages/main/src/Slider.ts index 3bc6bb828356..791377e0f5f3 100644 --- a/packages/main/src/Slider.ts +++ b/packages/main/src/Slider.ts @@ -318,13 +318,6 @@ class Slider extends SliderBase implements IFormInputElement { handle: { [this.directionStart]: `${this._handlePositionFromStart}%`, }, - label: { - "width": `${this._labelWidth}%`, - }, - labelContainer: { - "width": `100%`, - [this.directionStart]: `-${this._labelWidth / 2}%`, - }, }; } diff --git a/packages/main/src/SliderBase.ts b/packages/main/src/SliderBase.ts index dfc76b8ea520..7f1ac76746ed 100644 --- a/packages/main/src/SliderBase.ts +++ b/packages/main/src/SliderBase.ts @@ -206,12 +206,6 @@ abstract class SliderBase extends UI5Element { _handleActionKeyPress(e: Event) {} // eslint-disable-line - // used in base template, but implemented in subclasses - abstract styles: { - label: Record, - labelContainer: Record, - }; - abstract tickmarksObject: Array; abstract _ariaLabelledByText: string; @@ -395,21 +389,28 @@ abstract class SliderBase extends UI5Element { // In such case the labels must correspond to the tickmarks, only the first and the last one should exist. if (spaceBetweenTickmarks < SliderBase.MIN_SPACE_BETWEEN_TICKMARKS) { this._hiddenTickmarks = true; - this._labelsOverlapping = true; } else { this._hiddenTickmarks = false; } if (this.labelInterval <= 0 || this._hiddenTickmarks) { + this._labelsOverlapping = true; return; } // Check if there are any overlapping labels. // If so - only the first and the last one should be visible - const labelItems = this.shadowRoot!.querySelectorAll(".ui5-slider-labels li"); - this._labelsOverlapping = [...labelItems].some(label => label.scrollWidth > label.clientWidth); - } + const remInPx = parseFloat(getComputedStyle(document.documentElement).fontSize); // calculate 1 rem in pixels + const childWidthPx = 2 * remInPx; // as specified label must be 2 rems so calculate one child width in pixels + + const labelItemsParent = this.shadowRoot!.querySelector(".ui5-slider-labels") as HTMLElement; + + const labelItemsSumWidth = this._labels.length * childWidthPx; // all labels width + const labelItemsParentWidth = labelItemsParent.clientWidth; // label parent width + + this._labelsOverlapping = labelItemsParentWidth < labelItemsSumWidth; + } /** * Called when the user starts interacting with the slider. * After a down event on the slider root, listen for move events on window, so the slider value diff --git a/packages/main/src/SliderBaseTemplate.tsx b/packages/main/src/SliderBaseTemplate.tsx index ced0ba863efa..9d899c41f7ef 100644 --- a/packages/main/src/SliderBaseTemplate.tsx +++ b/packages/main/src/SliderBaseTemplate.tsx @@ -35,16 +35,15 @@ export default function SliderBaseTemplate(this: SliderBase, hooks?: { )} {!!this.labelInterval && -
    - {this._labels.map(l => -
  • {l}
  • - )} -
+
    + {this._labels.map(l => +
  • + )} +
} } diff --git a/packages/main/src/themes/SliderBase.css b/packages/main/src/themes/SliderBase.css index af45238dcba4..6c7844ad408f 100644 --- a/packages/main/src/themes/SliderBase.css +++ b/packages/main/src/themes/SliderBase.css @@ -93,7 +93,7 @@ .ui5-slider-tickmarks li { height: var(--_ui5_slider_tickmark_height); - border-inline-start: 1px solid var(--_ui5_slider_tickmark_bg); + border-inline-start: 0.0625rem solid var(--_ui5_slider_tickmark_bg); } .ui5-slider-handle { @@ -203,28 +203,38 @@ margin: 0; padding: 0; white-space: nowrap; + height: 1rem; + width: 100%; + display: flex; + justify-content: space-between; } .ui5-slider-labels li { - position: relative; + position: relative; list-style: none; - padding-top: 0.3125rem; - height: 1rem; margin: 0; text-align: center; display: inline-block; - color: var(--_ui5_slider_label_color); font-family: var(--sapFontFamily); font-size: var(--_ui5_slider_label_fontsize); padding-top: 0; box-sizing: border-box; - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: top; + width: 0.0625rem; + visibility: hidden; +} + +.ui5-slider-labels li::after { + content: attr(data-counter); + position: absolute; + top: 0; + visibility: visible; + display: inline-block; + width: 2rem; + color: var(--_ui5_slider_label_color); + transform: translateX(-50%); } -.ui5-slider-hidden-labels li:not(:first-child):not(:last-child) { +.ui5-slider-hidden-labels li:not(:first-child):not(:last-child)::after { visibility: hidden; }