#html #css #list
#HTML #css #Список
Вопрос:
Итак, я работаю над меню, меню представляет собой список, а заголовки меню имеют класс, отличный от описания меню.
<ul class="menu-01">
<li class="menu-title">CHICKEN CASHEW NUT <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PANANG BEEF <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">GREEN CURRY CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PAD PIK KING CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
</ul>
Я хочу, чтобы цены совпадали друг с другом после названия товара. Но я не уверен, как именно я бы это оформил. В настоящее время я просто даю ему margin-right
.
Комментарии:
1. Переместите их вправо или расположите их абсолютными…
Ответ №1:
Простым решением было бы float
указать цену справа:
ul {
max-width: 20em;
margin: 0 auto;
list-style: none;
}
li {
margin-bottom: 1em;
}
li span {
float: right;
}
<ul class="menu-01">
<li class="menu-title">CHICKEN CASHEW NUT <span>12</span>
</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PANANG BEEF <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">GREEN CURRY CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PAD PIK KING CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
</ul>
Комментарии:
1. Вау, такое очевидное исправление. Сработало отлично. Спасибо!
Ответ №2:
Вы также могли бы использовать таблицу, подобную:
<table>
<tr><td>CHICKEN CASHEW NUT</td><td>12</td></tr>
<tr><td colspan="2">lorem ipsum</td></tr>
<tr><td>PANANG BEEF</td><td>12</td></tr>
</table>
Ответ №3:
ответ @ Fabian Schultz работает хорошо, вот еще одно решение с flexbox:
Это создает каждый .menu-title
контейнер flexbox (по display: flex
) и перемещает span
вправо, предоставляя ему margin-left: auto
Примечание: Я не знаю, что означает «sn», но я полагаю, что это должно быть внутри span.
ul {
list-style: none;
}
.menu-title {
display: flex;
font-size: 16px;
}
.menu-title span {
margin-left: auto;
color: #ccc;
}
.menu-meal {
margin: 0 0 12px 16px;
}
<ul class="menu-01">
<li class="menu-title">CHICKEN CASHEW NUT <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PANANG BEEF <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">GREEN CURRY CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PAD PIK KING CHICKEN <span>12</span>sn</li>
<li class="menu-meal">lorem ipsum</li>
</ul>
Ответ №4:
Как справедливо сказал @johannes, flexbox — это еще один способ решить эту проблему, и это мой предпочтительный маршрут, потому что он намного эффективнее в использовании.
Если требуется, прочитайте больше о Flexbox здесь
Кроме того, поскольку я не знаю, что такое ‘sn‘, я добавил его к цене, как вы бы сделали, если бы это была валюта.
Смотрите мое решение ниже:
Обратите внимание, что: ‘sn‘ был удален из тегов’li‘, поскольку они добавляются динамически с помощью CSS
HTML
<ul class="menu-01">
<li class="menu-title">CHICKEN CASHEW NUT <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PANANG BEEF <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">GREEN CURRY CHICKEN <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
<li class="menu-title">PAD PIK KING CHICKEN <span>12</span></li>
<li class="menu-meal">lorem ipsum</li>
</ul>
CSS
/* some ul styles */
ul {
position: relative;
max-width: 20em;
margin: 0 auto;
padding: 0;
}
/* li display set to flex, so content flows as expected */
li {
position: relative
list-style: none;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
margin-bottom: 0.5em;
}
/* 'sn' appended to the '.menu-title' span using ':after' pseudo-element */
.menu-title > span:after {
content: "sn";
}
.menu-meal {
font-style: italic;
margin-bottom: 2.5em;
}
Смотрите демонстрацию на jsfiddle
Надеюсь, это полезно.