Относительно 1
Существует несколько вариантов выравнивания содержимого. Вы можете использовать flexbox
, grid
или классы, использующие переводы для центральных элементов. В вашем случае я бы, вероятно, использовал flexbox
. Он довольно прост в использовании.
Посмотрите здесь: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Относительно 2
Не советую перезагружать страницу с POST-Requests
.
Если это жесткое требование, вы можете установить "активную" логику класса на основе URL
. Эта простая логика if-else
будет находиться внутри контроллера страницы или любого другого компонента, который вы там используете.
Если это не является жестким требованием, вы можете просто переключать классы с помощью js. Однако это не будет постоянным (т. Е. Потеряно после перезагрузки). В одностраничном приложении этого, вероятно, будет достаточно. Теоретически вы могли бы сохранить состояние выбора в файле cookie или сеансе, но я, вероятно, не стал бы этого делать.
Существует также возможность иметь ссылки с символом маршрута #
внутри href
. Это позволит вам иметь какое-то состояние внутри URL
без перезагрузки страницы. Это приведет к прокрутке/переходу к элементу, на который вы ссылаетесь.
В этом примере ниже выбор будет потерян после перезагрузки:
const menuItems = document.querySelectorAll('.menu a.btn');
const selectItem = (i, menuItems) => {
for (let j = 0; j < menuItems.length; j++) {
menuItems[j].classList.remove('btn-success');
}
menuItems[i].classList.add('btn-success');
}
for (let i = 0; i < menuItems.length; i++) {
menuItems[i].addEventListener('click', (e) => {
e.preventDefault();
selectItem(i, menuItems);
return false;
});
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<nav class="menu" role="navigation">
<a href="books/all" class="btn btn-md btn-success" role="button">All books</a>
<a href="books/fiction" class="btn btn-md" role="button">Fiction</a>
<a href="books/biography" class="btn btn-md" role="button">Biography</a>
<a href="books/new" class="btn btn-md" role="button">New</a>
</nav>
Вместо этого можно сделать так:
const menuItems = document.querySelectorAll('.menu a.btn');
const selectItem = (i, menuItems) => {
for (let j = 0; j < menuItems.length; j++) {
menuItems[j].classList.remove('btn-success');
}
menuItems[i].classList.add('btn-success');
}
for (let i = 0; i < menuItems.length; i++) {
menuItems[i].addEventListener('click', (e) => {
selectItem(i, menuItems);
});
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<nav class="menu" role="navigation">
<a id=#books/all" href="#books/all" class="btn btn-md btn-success" role="button">All books</a>
<a id="#books/fiction" href="#books/fiction" class="btn btn-md" role="button">Fiction</a>
<a id=#books/biography" href="#books/biography" class="btn btn-md" role="button">Biography</a>
<a id="#books/new"href="#books/new" class="btn btn-md" role="button">New</a>
</nav>
К #
также можно получить доступ в CSS
с помощью селектора :target
.
если наклонить голову, то да она вертикальная, но проблема в том, что тексты повернуты на 90 градусов!
Спасибо! Простой css - это то, чего мне не хватало. Что касается jQuery, будет ли это связано с назначением идентификаторов каждой кнопке и удалением класса
btn-success
из всех других кнопок при каждом щелчке и назначением его той, которая была нажата? Не уверен, потому что запрос POST перезагружает страницуЯ обновлю комментарий. Извините, это заняло так много времени.