Использование шаблона для общего формата html / css на всем сайте - PullRequest
1 голос
/ 03 августа 2020

Я работаю над веб-сайтом, и я относительно новичок в этом. Я сделал домашнюю страницу с навигационной панелью и заголовком, а также с несколькими страницами, на которые можно переходить. все метаданные в заголовке, выпадающее меню с очень вложенной навигационной панелью и другое повторяющееся содержимое в каждом html файле.

Есть ли способ создать шаблон или разбить эти очень плотно вложенные элементы на свои собственные файлы, чтобы, когда я хочу поместить их в свою разметку, я мог использовать ссылку на этот файл, а не на весь этот код? или мне следует считать это не проблемой и двигаться дальше?

Мне кажется, что это решение, о котором я думаю, будет включать функцию и JS. Если да, было бы это идеальным решением, учитывая, что по умолчанию некоторые люди отключают JS в своих браузерах?

примечание: я обычно работаю в python, где мне нравится писать вещи, которые работают, но очень аккуратно и коротко. Я подозреваю, что эта склонность исчезает в моей веб-разработке и заставляет меня отказываться от неэлегантных решений, когда и где они эффективны.

Вот index. html для справки:

image

и еще одна страница на сайте:

<html lang="en" dir="ltr" class="no-js">
     <head>
       metadata here
       <link rel="stylesheet" href="stylesheet.css">
     </head>
     <body>
             <nav>drop down menu here  </nav>
          <h4>Create an account by entering your info below</h4>
          <form action="POST">
           <!----we should use css to center-align these input fields, rather than &nbsp----->
               Full name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text"><br>
               User name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="" id=""><br>
               Email Address&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="" id=""><br>
               Password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text"><br>
               Confirm Password&nbsp;<input type="text"><br>
               <button>Submit</button>
          </form>
     </body>
</html>

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Эта проблема, с которой вы сталкиваетесь, является распространенной, и для ее уменьшения было разработано несколько решений. Как вы намекали, они обычно включают извлечение общих logi c в отдельный шаблон многократного использования (и при необходимости параметризованный). Если сервер выполняет предварительную обработку вашего HTML и включает соответствующие шаблоны в нужных местах, это поможет.

В качестве альтернативы, если вы не хотите запускать сервер только для этого, вы может использовать интерфейсную библиотеку (популярными вариантами на данный момент являются React и Angular), которая позволяет вам извлекать общие logi c в повторно используемые компоненты .

При установке интерфейсной библиотеки для для этой цели также слишком много накладных расходов, вы можете свернуть свои собственные шаблоны, извлекая повторение в функцию:

function template() {
  document.getElementById("some-container-id").innerHTML='your html code here';
}

Эта функция template может опционально принимать параметры, которые она могла бы подставить в строку HTML.

Я должен добавить предупреждение, поскольку кодирование в строках некрасиво и подвержено ошибкам, и вы можете столкнуться с общими проблемами, которые уже решены интерфейсными библиотеками. Вы можете вручную создавать HTML сущностей и назначать их родственниками друг другу, но, возможно, это даже более громоздко, чем программирование в строках.

1 голос
/ 03 августа 2020

Есть две стратегии, которые вы можете использовать для решения своей проблемы. У них обоих есть свои плюсы и минусы, но в первую очередь они зависят от одного вопроса: используете ли вы упаковщик или нет?

Использование внешнего файла HTML в качестве шаблона и внедрение его на страницу

Один из подходов может заключаться в том, чтобы написать файл шаблона, запросив его через javascript и затем внедрив его в DOM. Проблема с этим методом заключается в том, что вы должны настроить / свой сервер, чтобы эта бесполезная страница stati c была доступна через запрос, но тогда вы могли бы легко создать подкаталоги, такие как /static/templates/navbar.html.

Это краткий пример этого подхода:

fetch('/static/templates/navbar.html').then(response => {
   if(response.ok)
      return response.txt();
}).then(page => {
    document.body.innerHTML += page;
});

Очевидные ограничения этого метода заключаются в том, что вам необходимо создать файл шаблона HTML для каждого компонента и загрузить их в порядке , в противном случае, ваша DOM будет беспорядочной (1), и тогда вам нужно будет загрузить все эти шаблоны, которые потребуют дополнительной полосы пропускания.

Рефакторинг ваших тегов с помощью javascript и их внедрение на страницу

В случае, если вы используете сборщик, я честно считаю, что этот подход более устойчив, поскольку вы не запрашиваете какой-либо другой файл, вместо этого вы можете создать эти элементы через javascript, а затем загрузить их через другой скрипт. Скрипт будет содержать функцию (что-то вроде init () или аналогичную), которая будет вставлять элементы в DOM.

const nav = document.createElement('nav');
const ul = document.createElement('ul');
ul.id = 'menu';
const li01 = document.createElement('li');
const a01 = document.createElement('a');
a01.href = 'watchlist.html';
a01.innerText = 'Watchlist';
li01.appendChild(a01);
ul.appendChild(li01);
nav.appendChild(ul);

И отсюда вы можете понять, как это работает. Преимущество этого подхода в том, что вам не нужно запрашивать какой-либо внешний файл и вы можете записать весь этот код внутри другого файла, который сборщик автоматически скомпилирует в один. js (2). С другой стороны, если ваше меню огромно, ваше время на интерактивность может увеличиться из-за всех вычислений javascript.

Используйте javascript фреймворк

Как уже было сказано другим пользователем , используются различные фреймворки, которые позволяют создавать шаблоны, называемые компоненты , а затем загружать их динамически, такие как React, Preact, VueJS, Angular и многие другие. Изучение хотя бы одного из них абсолютно поможет вам, если вы захотите найти работу в веб-разработке. Обратной стороной этого подхода является то, что вы в основном внедряете в свой код множество функций, которые, возможно, никогда не будете использовать, что, очевидно, будет медленнее по сравнению с vanilla javascript.

Выбирайте!

(1) помните, что выборка является асинхронной функцией, и поэтому она не загружает ресурсы по порядку. (2) если по какой-то причине вы не хотите использовать сборщик, вы все равно можете загрузить файл с помощью другого тега скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...