Вопрос или проблема
Предоставленное изображение является снимком виджета меню питания, созданного с использованием ags. Код приведён ниже:
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
const WINDOW_NAME = "powermenu";
const icons = {
sleep: "🛌", // Иконка сна
reboot: "🔄", // Иконка перезагрузки
logout: "🚪", // Иконка выхода
shutdown: "💻", // Иконка выключения
};
const PowerButton = (icon, action, label) => Widget.Button({
on_clicked: () => {
App.closeWindow(WINDOW_NAME);
action();
},
class_name: 'power-button',
child: Widget.Box({
vertical: true,
children: [
Widget.Label({ label: icon }),
Widget.Label({ label }),
],
}),
});
const PowerMenu = () => {
return Widget.Box({
class_name: 'powermenu-container',
vertical: true,
children: [
Widget.Box({
class_name: 'powermenu-buttons',
children: [
PowerButton(icons.shutdown, () => Utils.exec('systemctl poweroff'), 'Выключение'),
PowerButton(icons.reboot, () => Utils.exec('systemctl reboot'), 'Перезагрузка'),
PowerButton(icons.logout, () => Utils.exec('hyprctl dispatch exit'), 'Выход'),
PowerButton(icons.sleep, () => Utils.exec('systemctl suspend'), 'Сон'),
],
}),
],
setup: self => self.hook(App, (_, windowName, visible) => {
if (windowName !== WINDOW_NAME)
return;
if (visible) {
// Вы можете добавить любую логику настройки здесь, когда окно становится видимым
}
}),
});
};
export const powermenu = Widget.Window({
name: WINDOW_NAME,
setup: self => self.keybind("Escape", () => {
App.closeWindow(WINDOW_NAME);
}),
visible: false,
layer: 'overlay',
keymode: "exclusive", // Это гарантирует, что окно захватывает все нажатия клавиш
child: PowerMenu(),
});
Файл style.css расположен ниже:
/*другие свойства для панели и лаунчера и т.д.*/
/*затем у меня есть*/
.powermenu-container {
background-color: #180f17;
border: 4px solid #ff66f7;
border-radius: 15px;
padding: 20px;
}
.powermenu-buttons {
padding: 15px;
background-color: #180f17;
border-radius: 10px;
}
.power-button {
background-color: #180f17;
border: 4px solid #ffffff;
border-radius: 10px;
padding: 15px;
min-width: 100px;
min-height: 100px;
transition: all 0.2s ease;
}
.power-button:hover {
border: 2px solid #3584e4;
}
.power-button:focus {
border: 2px solid #3584e4;
}
.power-button label {
color: white;
background-color: #825bd6;
font-family: 'JetBrainsMono NFM ExtraBold', 'Twitter Color Emoji', 'sans-serif';
font-size: 22px;
font-weight: bold;
padding: 15px;
}
Я ничего не знаю о javascript или css, и все это создал с помощью ИИ, поэтому возможно, что есть много ошибок. Как вы можете видеть, за виджетом есть белый слой, который появляется за округлёнными углами. Также цвет фона, установленный для кнопки, не применяется. Как я могу это исправить?
Ответ или решение
Конечно, давайте рассмотрим ваш вопрос о виджете GTK shell на JavaScript и CSS. Ваша цель заключается в том, чтобы устранить проблемы с отображением белого фона позади виджета, а также исправить применение фона кнопки. Ниже вы найдете профессиональный и детализированный ответ, а также рекомендации по исправлению ошибок.
Проблема с белым слоем за виджетом
Ваша проблема с белым фоном, который появляется за округленными углами виджета, может быть связана с тем, что свойства CSS не полностью захватывают фон вашего контейнера. Возможно, сама структура ваших элементов не позволяет задать им нужный фон.
Рекомендации по решению данной проблемы:
- Проверьте свойство
background-color
виджета: Убедитесь, что элемент, который содержит ваш виджет, имеет заданный фон. Мы видим, что для класса.powermenu-container
установленbackground-color: #180f17;
, но необходимо убедиться, что этот класс применяется ко всем нужным элементам.
.powermenu-container {
background-color: #180f17; /* Фон контейнера */
border: 4px solid #ff66f7;
border-radius: 15px;
padding: 20px;
overflow: hidden; /* Добавьте это свойство */
}
- Свойство
overflow
: Добавьте свойствоoverflow: hidden;
в класс.powermenu-container
. Это свойство позволит обрезать все содержимое, которое выходит за границы контейнера, что предотвратит появление белого фона вокруг округленных углов.
Проблема с применением фона для кнопки
Второй вопрос касается применения цвета фона к кнопкам. Вы указали, что фоновый цвет кнопки не применяется. Рассмотрим возможные причины и пути решения этой проблемы.
Рекомендации по исправлению:
- Шаблон кнопок: CSS класс
.power-button
у вас уже имеет установленный фонbackground-color: #180f17;
. Важно убедиться, что специфичность CSS не мешает этому стилю применяться к кнопкам. Например, если на кнопки также влияют другие стили, необходимо повысить приоритет определения стиля.
.power-button {
background-color: #180f17 !important; /* Используйте !important для увеличения приоритета */
border: 4px solid #ffffff;
border-radius: 10px;
padding: 15px;
min-width: 100px;
min-height: 100px;
transition: all 0.2s ease;
}
-
Проверьте наличие конфликтующих стилей: Обратите внимание на другие CSS-файлы в вашем проекте, которые могут переопределять ваши стили. Если в других стилях имеется свойство, которое влияет на кнопки, возможно, оно будет требовать применения
!important
. -
Проверьте визуализацию в браузере: Используйте инструменты разработчика в браузере (обычно F12), чтобы увидеть, какие стили применяются к вашим кнопкам. Это позволит вам определить, что именно мешает вашему фону появиться.
Заключение
После внесения предложенных изменений в ваш CSS и JavaScript код, вы должны увидеть, что белый фон исчезнет, а фон кнопок будет правильно применяться. Это улучшит общий внешний вид вашего виджета.
Если возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их. Всегда приятно помочь в решении ваших задач!