Можно ли сделать трехсекционный разделитель () с помощью CSS?

Вопрос или проблема

Я пытаюсь воспроизвести разделительную панель меню Nintendo Wii с помощью CSS на React JS и Tailwind (синюю, извините за плохое качество изображения):
wii menu bar

Как вы можете видеть, панель идет прямо, затем вниз, снова прямо, затем вверх и снова прямо.

Я пытался разделить панель на три части. Сначала левую часть, затем среднюю и затем правую часть, используя радиус границы и тень коробки, но моя основная проблема в том, что радиус сужается по краям, и когда я комбинирую его с другой панелью, края не сливаются. Вот код левой и средней части (я не стал делать правую часть) и часть часов и даты:

.mm-left-box {
    width: calc(50% - 8rem);
    height: 100px;
    background-color: rgb(209 213 219 / var(--tw-bg-opacity));
    transform: translateX(-17rem);
    position: absolute;
    border-bottom-right-radius: 50%;
    padding-bottom: 1rem;
    padding-top: 1rem;
}

.mm-left-bar {
    border-top: 4px solid #00c4ff;
    border-radius: 50px;
    box-shadow: 0 -2px #00c4ff;
}

.mm-bar {
    border-top: none;
    border-bottom: 6px solid #00c4ff;
    border-bottom-left-radius: 50px;
    border-bottom-right-radius: 50px;
}
<footer className="relative">
    {/* Левая линия */}
    <div className="left-0 top-0">
        <div className="mm-left-box mm-left-bar"></div>
    </div>

    {/* Текущая дата и время и средняя линия */}
    <div className="flex justify-center items-center">
        <div className="pb-16 relative z-10 bg-gray-300">
            <div className="mm-bar mm-striped-bg bg-white font-mono pb-3 text-gray-400 text-5xl px-80">
                {formattedTime}
            </div>
            <div className="font-rodin text-4xl text-gray-500 text-center ">
                <strong>{currentDate}</strong>
            </div>
        </div>
    </div>
</footer>

Ответ или решение

Да, создать трехчастную разделительную линию, как в меню Nintendo Wii, с помощью CSS возможно. Это можно сделать, используя свойства CSS, такие как border-radius, box-shadow, и настройку размеров для создания визуального эффекта. Я предложу полный рабочий пример, используя React и Tailwind CSS.

Пример CSS

.mm-left-box {
    width: calc(50% - 8rem);
    height: 100px;
    background-color: rgba(209, 213, 219, 0.5);
    transform: translateX(-17rem);
    position: absolute;
    border-bottom-right-radius: 50%;
    padding-bottom: 1rem;
    padding-top: 1rem;
}

.mm-left-bar {
    border-top: 4px solid #00c4ff;
    border-radius: 50px;
    box-shadow: 0 -2px #00c4ff;
}

.mm-bar {
    background-color: #fff;
    border-top: none;
    border-bottom: 6px solid #00c4ff;
    border-bottom-left-radius: 50px;
    border-bottom-right-radius: 50px;
    padding-bottom: 3rem; /* Adjust this value based on content */
}

.mm-right-bar {
    border-top: 4px solid #00c4ff;
    border-radius: 50px;
    box-shadow: 0 2px #00c4ff;
    position: absolute; /* Выравнивание правой части */
    height: 100px; /* Высота правой части */
    right: 0;
    bottom: 0;
    border-top-right-radius: 50% /* Чтобы завершить форму */;
}

Пример React компонента

import React from 'react';

const MyMenuBar = ({ formattedTime, currentDate }) => {
    return (
        <footer className="relative">
            {/* Левая часть */}
            <div className="left-0 top-0">
                <div className="mm-left-box mm-left-bar"></div>
            </div>

            {/* Текущая дата и время с центральной линией */}
            <div className="flex justify-center items-center">
                <div className="pb-16 relative z-10 bg-gray-300">
                    <div className="mm-bar bg-white font-mono text-gray-400 text-5xl">
                        {formattedTime}
                    </div>
                    <div className="font-rodin text-4xl text-gray-500 text-center">
                        <strong>{currentDate}</strong>
                    </div>
                    {/* Правая линия */}
                    <div className="mm-right-bar"></div>
                </div>
            </div>
        </footer>
    );
};

export default MyMenuBar;

Пояснения к коду:

  1. Левая часть создается с помощью блока mm-left-box, который имеет снизу скругленный угол. Цвет фона можно настроить по вашему желанию.

  2. Центральная часть (события и время) представляет собой компонент, который включает дополнительную подложку, чтобы не соприкасаться с верхней и нижней линиями.

  3. Правая часть имеет аналогичное оформление, что и левая, и позиционируется абсолютно для создания иллюзии связанного разделения.

Советы

  • Ширина и высота: Вы можете настроить ширину и высоту всех частей (левой, центральной и правой) по своему усмотрению для получения лучшего визуального эффекта.
  • Отступы: Используйте значения отступов (padding) для управления размещением текста внутри центральной части.
  • Настройка цветовой схемы: Убедитесь, что цвета, которые вы используете, соответствуют вашему проекту.

Таким образом, используя предложенный выше код, вы сможете эффективно создать трехчастную разделительную линию в стиле меню Nintendo Wii с использованием React и Tailwind CSS.

Оцените материал
Добавить комментарий

Капча загружается...