design
This commit is contained in:
parent
e3860e2490
commit
e02839af96
|
@ -44,65 +44,89 @@
|
||||||
.App {
|
.App {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-height: 100vh; /* Минимальная высота на весь экран */
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header {
|
.App-header {
|
||||||
background-color: #282c34; /* Темный фон шапки */
|
background-color: var(--primary-color);
|
||||||
padding: 20px;
|
padding: 1rem;
|
||||||
color: white;
|
color: white;
|
||||||
|
box-shadow: 0 2px 4px var(--shadow-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.App-header-content {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 1rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between; /* Разместить заголовок и навигацию по краям */
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header h1 {
|
.App-header h1 {
|
||||||
margin: 0;
|
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header nav a {
|
.App-nav {
|
||||||
color: #61dafb; /* Цвет ссылок в шапке */
|
display: flex;
|
||||||
margin-left: 15px; /* Отступ между ссылками */
|
gap: 1rem;
|
||||||
font-size: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header nav a:hover {
|
.App-nav a {
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.App-nav a:hover {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
flex-grow: 1; /* Основной контент занимает все доступное пространство */
|
flex: 1;
|
||||||
padding: 20px;
|
padding: 2rem 1rem;
|
||||||
max-width: 1200px; /* Ограничим максимальную ширину контента */
|
max-width: 1200px;
|
||||||
margin: 0 auto; /* Центрируем контент */
|
width: 100%;
|
||||||
width: 90%; /* Небольшой отступ по бокам на больших экранах */
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
background: white;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 4px var(--shadow-color);
|
||||||
|
padding: 2rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
background-color: #f8f9fa; /* Светлый фон футера */
|
background-color: var(--primary-color);
|
||||||
padding: 10px 20px;
|
color: white;
|
||||||
|
padding: 1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-top: 1px solid #e7e7e7;
|
margin-top: auto;
|
||||||
margin-top: auto; /* Прижимаем футер к низу */
|
|
||||||
color: #6c757d;
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Базовые стили для контейнеров страниц */
|
@media (max-width: 768px) {
|
||||||
.page-container {
|
.App-header-content {
|
||||||
background-color: #fff; /* Белый фон для основного контента */
|
flex-direction: column;
|
||||||
padding: 20px;
|
text-align: center;
|
||||||
border-radius: 8px;
|
}
|
||||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Небольшая тень */
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-container h2 {
|
.App-nav {
|
||||||
margin-top: 0;
|
width: 100%;
|
||||||
color: #343a40; /* Темный цвет заголовков страниц */
|
justify-content: center;
|
||||||
border-bottom: 2px solid #007bff; /* Подчеркивание заголовка */
|
}
|
||||||
padding-bottom: 10px;
|
|
||||||
margin-bottom: 20px;
|
main {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,13 @@ const App: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
<header className="App-header">
|
<header className="App-header">
|
||||||
|
<div className="App-header-content">
|
||||||
<h1>Раскройка Стекла</h1>
|
<h1>Раскройка Стекла</h1>
|
||||||
<nav>
|
<nav className="App-nav">
|
||||||
<Link to="/calculate" style={{ marginRight: '10px' }}>Новый расчет</Link>
|
<Link to="/calculate">Новый расчет</Link>
|
||||||
<Link to="/history">История</Link>
|
<Link to="/history">История</Link>
|
||||||
</nav>
|
</nav>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<AppRouter />
|
<AppRouter />
|
||||||
|
|
|
@ -1,15 +1,34 @@
|
||||||
/* Сброс базовых стилей */
|
:root {
|
||||||
body, html, #root {
|
--primary-color: #2c3e50;
|
||||||
|
--secondary-color: #3498db;
|
||||||
|
--background-color: #f5f6fa;
|
||||||
|
--text-color: #2c3e50;
|
||||||
|
--border-color: #dcdde1;
|
||||||
|
--shadow-color: rgba(0, 0, 0, 0.1);
|
||||||
|
--success-color: #27ae60;
|
||||||
|
--error-color: #e74c3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
height: 100%;
|
box-sizing: border-box;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
}
|
||||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
|
||||||
sans-serif;
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
background-color: #f4f7f6; /* Светлый фон для всей страницы */
|
background-color: var(--background-color);
|
||||||
color: #333; /* Основной цвет текста */
|
color: var(--text-color);
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
|
|
|
@ -1,63 +1,73 @@
|
||||||
.formContainer {
|
.formContainer {
|
||||||
/* Используем класс из App.css для общего стиля */
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.formGroup {
|
.formGroup {
|
||||||
margin-bottom: 15px;
|
margin-bottom: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 5px;
|
font-weight: 500;
|
||||||
font-weight: bold;
|
margin-bottom: 0.5rem;
|
||||||
color: #495057; /* Цвет метки */
|
color: var(--text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.input,
|
.input,
|
||||||
.textarea {
|
.textarea {
|
||||||
width: calc(100% - 18px); /* Учитываем padding и border */
|
width: 100%;
|
||||||
padding: 8px;
|
padding: 0.75rem;
|
||||||
border: 1px solid #ced4da; /* Граница поля ввода */
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
transition: border-color 0.3s, box-shadow 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input:focus,
|
.input:focus,
|
||||||
.textarea:focus {
|
.textarea:focus {
|
||||||
border-color: #80bdff;
|
outline: none;
|
||||||
outline: 0;
|
border-color: var(--secondary-color);
|
||||||
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.textarea {
|
.textarea {
|
||||||
min-height: 100px;
|
min-height: 150px;
|
||||||
resize: vertical; /* Разрешить изменять размер по вертикали */
|
resize: vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
.errorMessage {
|
.errorMessage {
|
||||||
color: #dc3545; /* Красный цвет для ошибок */
|
color: var(--error-color);
|
||||||
font-size: 0.875em;
|
font-size: 0.875rem;
|
||||||
margin-top: 5px;
|
margin-top: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submitButton {
|
.submitButton {
|
||||||
padding: 10px 20px;
|
background-color: var(--secondary-color);
|
||||||
font-size: 1rem;
|
|
||||||
background-color: #007bff;
|
|
||||||
color: white;
|
color: white;
|
||||||
border: none;
|
border: none;
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
font-size: 1rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background-color 0.2s ease-in-out;
|
transition: background-color 0.3s;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 300px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submitButton:hover:not(:disabled) {
|
.submitButton:hover:not(:disabled) {
|
||||||
background-color: #0056b3;
|
background-color: #2980b9;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submitButton:disabled {
|
.submitButton:disabled {
|
||||||
background-color: #6c757d; /* Серый цвет для неактивной кнопки */
|
background-color: #95a5a6;
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.formContainer {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,37 +1,80 @@
|
||||||
.resultContainer {
|
.resultContainer {
|
||||||
/* Общий стиль страницы */
|
max-width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailSection {
|
.section {
|
||||||
margin-bottom: 25px;
|
margin-bottom: 2rem;
|
||||||
padding-bottom: 15px;
|
padding: 1.5rem;
|
||||||
border-bottom: 1px solid #eee;
|
background: white;
|
||||||
}
|
border-radius: 8px;
|
||||||
.detailSection:last-child {
|
box-shadow: 0 2px 4px var(--shadow-color);
|
||||||
border-bottom: none; /* Убрать границу у последнего блока */
|
|
||||||
margin-bottom: 0;
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailTitle {
|
.sectionTitle {
|
||||||
font-weight: bold;
|
font-size: 1.25rem;
|
||||||
margin-bottom: 8px;
|
color: var(--primary-color);
|
||||||
color: #495057; /* Цвет заголовка секции */
|
margin-bottom: 1rem;
|
||||||
font-size: 1.1em;
|
padding-bottom: 0.5rem;
|
||||||
|
border-bottom: 2px solid var(--secondary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailGrid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailItem {
|
||||||
|
padding: 1rem;
|
||||||
|
background: var(--background-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailLabel {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-color);
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailValue {
|
.detailValue {
|
||||||
color: #343a40; /* Цвет значения */
|
color: var(--secondary-color);
|
||||||
/* Можно добавить стили для лучшего отображения данных */
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visualizationContainer {
|
||||||
|
aspect-ratio: 16/9;
|
||||||
|
width: 100%;
|
||||||
|
max-height: 600px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jsonViewer {
|
||||||
|
background: var(--background-color);
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loading,
|
.loading,
|
||||||
.error {
|
.error {
|
||||||
margin-top: 20px;
|
text-align: center;
|
||||||
font-style: italic;
|
padding: 2rem;
|
||||||
color: #6c757d;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
color: #dc3545;
|
color: var(--error-color);
|
||||||
font-weight: bold;
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.section {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailGrid {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,50 +1,63 @@
|
||||||
.historyContainer {
|
.historyContainer {
|
||||||
/* Общий стиль страницы */
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table {
|
.table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
margin-top: 20px;
|
margin-top: 1rem;
|
||||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); /* Тень для таблицы */
|
background: white;
|
||||||
overflow: hidden; /* Для скругления углов */
|
border-radius: 8px;
|
||||||
border-radius: 8px; /* Скругление углов таблицы */
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.th,
|
.th,
|
||||||
.td {
|
.td {
|
||||||
border: 1px solid #ddd;
|
padding: 1rem;
|
||||||
padding: 12px 15px; /* Увеличим padding */
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.th {
|
.th {
|
||||||
background-color: #f8f9fa; /* Светлый фон заголовков */
|
background-color: var(--primary-color);
|
||||||
font-weight: bold;
|
color: white;
|
||||||
color: #495057;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Зебра для строк */
|
.tr:hover {
|
||||||
.tbody tr:nth-of-type(even) {
|
background-color: rgba(52, 152, 219, 0.05);
|
||||||
background-color: #fdfdfe;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tbody tr:hover {
|
.link {
|
||||||
background-color: #f1f1f1; /* Подсветка строки при наведении */
|
color: var(--secondary-color);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.td a { /* Стилизация ссылки "Подробнее" */
|
.link:hover {
|
||||||
font-weight: bold;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.empty,
|
||||||
.loading,
|
.loading,
|
||||||
.error,
|
|
||||||
.empty {
|
|
||||||
margin-top: 20px;
|
|
||||||
font-style: italic;
|
|
||||||
color: #6c757d;
|
|
||||||
}
|
|
||||||
.error {
|
.error {
|
||||||
color: #dc3545;
|
text-align: center;
|
||||||
font-weight: bold;
|
padding: 2rem;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: var(--error-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.th,
|
||||||
|
.td {
|
||||||
|
padding: 0.75rem;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobileHide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue