#javascript #css #handlebars.js #each
#javascript #css #handlebars.js #каждый
Вопрос:
Handlebars.js вопрос
Создание цвета фона для {{#каждого}}
<form action = "/ editday" method = "post">
<div class = "row" style = "background-color: {{striped @index}}">
Я использую своего помощника в полоску.Все в порядке.
Я хотел изменить цвет фона с помощью CSS:
.row.striped> div: nth-child (even) {
background-color: # 000;
}
Но ничего не произошло. Потому что CSS применяется до запуска цикла handlebars {{#each}} . CSS еще не видит окончательный документ с набором Таким образом, для всех строк background-color будет применяться ко всем одинаково или ни к одному. n-й дочерний элемент (четный), n-й дочерний элемент (нечетный).
Есть ли какой-либо другой более удобный способ сделать полосатый?
Комментарии:
1. Я думаю, что создание 2 классов также должно выполнять эту работу (по одному для каждого цвета и применять класс на основе индекса нечетно или четно).
2. Почему «striped» в фигурных скобках (
{{striped @index}}
), если вы просто хотите, чтобы литеральная строка была «striped» в вашем выводе? Синтаксис{{striped @index}}
будет для вызова помощника, зарегистрированного с именем «striped», о котором вы не упомянули.3. Да, я действительно не рассказал о коде моего помощника, извините
4. полосатый: index => { if (index % 2 == 0) { возвращает «WhiteSmoke»; } }
5. Почему вы смешиваете классы CSS с атрибутами встроенного стиля? Это усложняет вашу задачу. То, что определено в
style
атрибуте, будет переопределять то, что определено в классе. Во-вторых, я не думаю, что ваша проблема имеет какое-либо отношение к тому, когда применяется CSS.
Ответ №1:
Почему ваш CSS-селектор нацелен .row.striped
? В вашем шаблоне нет «полосатого» класса. Единственный класс, который у вас есть, это «строка», как в <div class="row">
.
«striped» — это имя вашего помощника Handlebars, который вы используете для создания цвета фона, применяемого с помощью атрибута встроенного стиля.
Я думаю, ваша проблема в том, что ваш встроенный стиль переопределяет ваш CSS.
Как вы упоминали в нашем обсуждении в комментариях, вы можете сделать это исключительно с помощью CSS. Просто удалите style
атрибут из вашего шаблона и добавьте необходимые правила CSS. Просто убедитесь, что вы не нацелены на отсутствующий «полосатый» класс. CSS будет выглядеть примерно так:
.row {
background-color: whitesmoke;
}
.row:nth-child(even) {
background-color: black;
}
Вот пример скрипки.
Для полноты картины я объясню, как вы могли бы использовать помощника. Вы бы удалили правила CSS и просто применили желаемый цвет на основе индекса. Помощник будет:
Handlebars.registerHelper('striped', function (index) {
return (index % 2 === 0) ? "WhiteSmoke" : 'black';
});
У меня тоже есть скрипка для этого.
Комментарии:
1. Извините. У вас одинаковые ссылки для обеих скрипок. Если вы сделаете, как вы сказали, только с помощью CSS: ` .row {цвет фона: белый дым; } .row: n-й дочерний элемент (четный) {цвет фона: черный; } `, тогда все строки будут одного цвета. И вы используете helher так же, как я внутри style = «background-color: Извините, я не вижу ничего нового. `row.striped` — это вариант, если я пишу
<div class = "row striped">
. Но это не особо важно, так как суть не меняется2. Забыл упомянуть, что я использую nodejs и express-handlebars. Но сути это тоже не меняет.
3. @Illusion: извините за неправильные ссылки. Я исправил это сейчас. Первый использует CSS и не имеет помощника; вторые используют помощника и не имеют CSS. Оба результата приводят к чередованию белых дымовых и черных строк.
4. Большое вам спасибо! Это действительно работает. Я не понял этого из-за неправильно расположенного элемента <form>, а также из-за наличия элемента <hr> . Я не привел весь код, он громоздкий, но теперь я думаю, что мне следовало разместить весь код