Spaces:
Running
Running
| /* src/components/SearchButton/SearchButton.module.css */ | |
| @import "../../_variables.css"; | |
| /* Класс .container теперь является основным для оборачивающего элемента */ | |
| .container { | |
| /* ... (все ваши текущие стили для .container) ... */ | |
| background-color: var(--color-primary); | |
| color: white; | |
| font-family: 'Inter', sans-serif; | |
| font-weight: 600; | |
| border-radius: 50%; | |
| border: none; | |
| text-align: center; | |
| cursor: pointer; | |
| text-decoration: none; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| position: relative; /* Важно: для нормального позиционирования внутри flex-контейнера */ | |
| overflow: hidden; | |
| z-index: 1; /* Изначально z-index 1 */ | |
| box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); | |
| transform: translateY(0); | |
| /* Анимации для контейнера при расширении/сворачивании и для hover/active */ | |
| transition: | |
| width 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), | |
| background-color 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), | |
| border-radius 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), | |
| box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), | |
| transform 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), | |
| left 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), /* Анимируем left */ | |
| top 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), /* Анимируем top */ | |
| transform 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); /* Для transform: scale/translate */ | |
| } | |
| /* Эффект свечения при наведении (как .button::before) */ | |
| .container::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(120deg, transparent 0%, rgba(255, 255, 255, 0.08) 20%, rgba(255, 255, 255, 0.08) 30%, transparent 70%, transparent 100%); | |
| z-index: -1; | |
| transition: left 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); | |
| } | |
| /* Hover эффекты для контейнера, когда он не развернут */ | |
| .container:hover { | |
| background-color: var(--color-primary-hover); | |
| box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); | |
| transform: translateY(-2px); | |
| } | |
| .container:hover::before { | |
| left: 100%; | |
| } | |
| /* Active эффекты для контейнера, когда он не развернут */ | |
| .container:active { | |
| background-color: var(--accent-color-active); | |
| transform: translateY(0px) scale(0.98); | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); | |
| transition-duration: 0.1s; | |
| } | |
| /* Focus-visible для доступности */ | |
| .container:focus-visible { | |
| outline: none; | |
| box-shadow: 0 0 0 4px rgba(20, 184, 166, 0.4), 0 8px 20px rgba(0, 0, 0, 0.15); | |
| } | |
| /* Стили для внутренней кнопки (когда контейнер не развернут) */ | |
| .searchButton { | |
| background: none; | |
| border: none; | |
| padding: 0; /* Убираем лишние паддинги, т.к. размер задает контейнер */ | |
| display: flex; /* Для центрирования SVG */ | |
| align-items: center; | |
| justify-content: center; | |
| width: 100%; /* Занимает всю ширину контейнера */ | |
| height: 100%; /* Занимает всю высоту контейнера */ | |
| cursor: pointer; | |
| } | |
| /* Стилизация SVG иконки */ | |
| .searchButton .icon { | |
| width: 60%; /* SVG будет занимать 60% от ширины контейнера */ | |
| height: 60%; /* SVG будет занимать 60% от высоты контейнера */ | |
| fill: var(--text-color-button); /* Цвет иконки */ | |
| transition: fill 0.3s ease; /* Плавное изменение цвета */ | |
| } | |
| /* Стили для развернутого состояния (поисковая строка) */ | |
| .container.expanded { | |
| width: 90%; /* Увеличиваем ширину, чтобы перекрывать */ | |
| border-radius: 8px; /* Прямоугольная форма */ | |
| background-color: white; /* Фон поисковой строки */ | |
| box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2); /* Более выраженная тень */ | |
| transform: translateY(0); /* Сбрасываем transform для развернутого состояния */ | |
| padding: 5px; /* Внутренние отступы для формы */ | |
| /* Важно: Позиционирование для перекрытия */ | |
| position: absolute; /* Теперь кнопка абсолютно позиционирована */ | |
| top: 50%; /* Смещаем на 50% вниз от родителя */ | |
| left: 50%; /* Смещаем на 50% вправо от родителя */ | |
| transform: translate(-50%, -50%); /* Центрируем относительно себя */ | |
| z-index: 1000; /* Высокий z-index для перекрытия */ | |
| } | |
| /* Скрываем ::before при развернутом состоянии */ | |
| .container.expanded::before { | |
| display: none; | |
| } | |
| /* Скрываем hover-эффекты при развернутом состоянии */ | |
| .container.expanded:hover { | |
| background-color: white; /* Не меняем фон при наведении в развернутом состоянии */ | |
| box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); /* Сохраняем тень */ | |
| } | |
| .container.expanded:active { | |
| background-color: white; | |
| box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); | |
| } | |
| .container.expanded:focus-visible { | |
| outline: none; | |
| box-shadow: 0 0 0 4px rgba(20, 184, 166, 0.4), 0 4px 15px rgba(0, 0, 0, 0.15); | |
| } | |
| .searchForm { | |
| display: flex; | |
| align-items: center; | |
| width: 100%; | |
| } | |
| .searchInput { | |
| flex-grow: 1; /* Поле ввода занимает все доступное пространство */ | |
| border: none; | |
| outline: none; /* Убираем стандартную обводку при фокусе */ | |
| padding: 8px 0; /* Отступы внутри инпута */ | |
| font-size: 1rem; | |
| background: transparent; /* Прозрачный фон, чтобы контейнер задавал цвет */ | |
| color: #333; /* Цвет текста в поле ввода */ | |
| font-family: 'Inter', sans-serif; /* Применяем шрифт и к инпуту */ | |
| } | |
| .searchInput::placeholder { | |
| color: #888; | |
| } | |
| .submitButton { | |
| background: none; | |
| border: none; | |
| cursor: pointer; | |
| padding: 5px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| margin-left: 10px; /* Отступ от инпута */ | |
| } | |
| .submitButton .iconInInput { | |
| width: 20px; | |
| height: 20px; | |
| fill: var(--accent-color); /* Цвет иконки в инпуте соответствует акцентному */ | |
| } |