У цьому прикладі реалізовано HTML-форму, усі елементи якої розташовано у вигляді таблиці (відповідає умові лабораторної роботи). Після натискання кнопки Start замість старого вікна (window.open) використовується модальне вікно, що стилізоване сучасно.
🔹 Зчитування даних 🔹 Динамічне створення контенту 🔹 Обробники подій
Нижче наведено повний код сторінки з підсвіткою синтаксису. Зверніть увагу на структуру: <style> (CSS для модалки), <form> у таблиці, <script> з функціями openModal() та closeModal(). Цей приклад можна взяти за основу для виконання індивідуального завдання (варіанти 1–17).
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Форма оформлення тексту</title>
<style>
table { margin:20px; border-collapse:collapse; }
td { padding:10px; }
/* МОДАЛЬНЕ ВІКНО */
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0; top: 0;
width: 100%; height: 100%;
background-color: rgba(0,0,0,0.5);
}
.modal-content {
background: white;
margin: 5% auto;
padding: 20px;
border-radius: 12px;
max-width: 600px;
box-shadow: 0 10px 30px #00000055;
}
.close-button {
float: right;
font-size: 30px;
cursor: pointer;
}
.modal-footer { text-align: right; margin-top: 20px; }
</style>
</head>
<body>
<h1>Форма оформлення тексту</h1>
<form id="textForm">
<table>
<tr><td>Заголовок:</td><td><input type="text" id="title" required></td></tr>
<tr><td>Текст:</td><td><textarea id="paragraph" rows="4" required></textarea></td></tr>
<tr><td>Колір фону:</td>
<td>
<label><input type="radio" name="bgColor" value="lightblue" checked> Блакитний</label><br>
<label><input type="radio" name="bgColor" value="lightgreen"> Зелений</label>
</td>
</tr>
<tr><td>Шрифт заголовка:</td>
<td>
<select id="fontFamily">
<option value="Arial">Arial</option>
<option value="Comic Sans MS">Comic Sans MS</option>
</select>
</td>
</tr>
<tr><td>Накреслення:</td>
<td>
<label><input type="checkbox" id="italic"> Курсив</label><br>
<label><input type="checkbox" id="underline"> Підкреслення</label>
</td>
</tr>
<tr><td>Міжрядковий інтервал:</td>
<td>
<label><input type="radio" name="lineSpacing" value="1.5" checked> 1.5</label><br>
<label><input type="radio" name="lineSpacing" value="2"> 2</label>
</td>
</tr>
<tr><td>Картинка:</td>
<td>
<select id="imageChoice">
<option value="dog">Собака</option>
<option value="cat">Кіт</option>
</select>
</td>
</tr>
<tr><td colspan="2">
<button type="button" onclick="openModal()">Start</button>
<button type="reset">Reset</button>
</td></tr>
</table>
</form>
<!-- Модалка -->
<div id="previewModal" class="modal">
<div class="modal-content">
<span class="close-button" onclick="closeModal()">×</span>
<h2 id="modal-title">Попередній перегляд</h2>
<div class="modal-body" id="modal-body"></div>
<div class="modal-footer">
<button onclick="closeModal()">Закрити</button>
</div>
</div>
</div>
<script>
const modal = document.getElementById('previewModal');
const modalBody = document.getElementById('modal-body');
function openModal() {
// зчитування даних форми
const title = document.getElementById('title').value;
const paragraph = document.getElementById('paragraph').value;
const bgColor = document.querySelector('input[name="bgColor"]:checked').value;
const fontFamily = document.getElementById('fontFamily').value;
const italic = document.getElementById('italic').checked;
const underline = document.getElementById('underline').checked;
const lineSpacing = document.querySelector('input[name="lineSpacing"]:checked').value;
const imageChoice = document.getElementById('imageChoice').value;
if (!title || !paragraph) { alert('Заповніть поля!'); return; }
let titleStyle = '';
if (italic) titleStyle += 'font-style: italic; ';
if (underline) titleStyle += 'text-decoration: underline; ';
const imageSrc = imageChoice === 'dog' ? 'dog.jpg' : 'cat.jpg';
// формуємо вміст модалки
modalBody.innerHTML = `
<style>
.preview-container {
background-color: ${bgColor};
font-family: ${fontFamily};
line-height: ${lineSpacing};
padding: 20px;
}
.preview-title { ${titleStyle} }
</style>
<div class="preview-container">
<h3 class="preview-title">${title}</h3>
<p>${paragraph}</p>
<img src="${imageSrc}" alt="${imageChoice}" width="300">
</div>
`;
modal.style.display = 'block';
document.getElementById('modal-title').innerText = `Перегляд: ${title}`;
}
function closeModal() {
modal.style.display = 'none';
}
window.onclick = function(e) {
if (e.target === modal) closeModal();
}
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && modal.style.display === 'block') closeModal();
});
</script>
</body>
</html>
Як це виглядає: після заповнення форми і натискання Start замість нового вікна з'являється охайне модальне вікно з оформленням.
| Варіант | Фон | Заголовок | Напис | Текст | Вибір картинки |
|---|---|---|---|---|---|
| 1 | колір фону, радіокнопки | шрифт, список | заголовок, прапорці | міжрядковий інтервал, радіокнопки | список |
| 2 | колір фону, список | розмір шрифту, радіокнопки | текст, прапорці | вирівнювання, список | радіокнопки |
| 3 | колір фону, радіокнопки | колір шрифту, список | заголовок, прапорці | розмір шрифту, радіокнопки | список |
| 4 | колір фону, список | вирівнювання, радіокнопки | текст, прапорці | шрифт, список | радіокнопки |
| 5 | колір фону, радіокнопки | вирівнювання, список | заголовок, прапорці | колір шрифту, радіокнопки | список |
| 6 | колір фону, список | шрифт, радіокнопки | текст, прапорці | міжрядковий інтервал, список | радіокнопки |
| 7 | колір фону, радіокнопки | розмір шрифту, список | заголовок, прапорці | вирівнювання, радіокнопки | список |
| 8 | колір фону, список | колір шрифту, радіокнопки | текст, прапорці | розмір шрифту, список | радіокнопки |
| 9 | картинка фону, радіокнопки | вирівнювання, список | заголовок, прапорці | шрифт, радіокнопки | список |
| 10 | картинка фону, список | шрифт, радіокнопки | текст, прапорці | колір шрифту, список | радіокнопки |
| 11 | картинка фону, радіокнопки | розмір шрифту, список | заголовок, прапорці | міжрядковий інтервал, радіокнопки | список |
| 12 | картинка фону, список | колір шрифту, радіокнопки | текст, прапорці | вирівнювання, список | радіокнопки |
| 13 | картинка фону, радіокнопки | вирівнювання, список | заголовок, прапорці | розмір шрифту, радіокнопки | список |
| 14 | картинка фону, список | шрифт, радіокнопки | текст, прапорці | колір шрифту, список | радіокнопки |
| 15 | картинка фону, радіокнопки | розмір шрифту, список | заголовок і текст, прапорці | шрифт, радіокнопки | список |
| 16 | картинка фону, список | колір шрифту, радіокнопки | заголовок та текст, прапорці | розмір шрифту , список | радіокнопки |
| 17 | картинка фону, радіокнопки | Вирівнювання, список | заголовок і текст, прапорці | шрифт, радіокнопки | список |
На основі наведеного вище прикладу з модальним вікном потрібно модифікувати форму згідно з вашим рядком у таблиці. Наприклад:
background-image.Підказка: усі дані зчитуйте аналогічно openModal(), а при формуванні внутрішнього HTML модального вікна підставляйте обрані стилі через шаблонні рядки.