Проблема с динамическим обновлением перед атрибутом - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь воссоздать это изображение в HTML / CSS / JS: (с использованием семантики HTML5)

Это вопрос, который мне был задан:

enter image description here

Вот моя реализация.Однако Я не уверен, как мне получить / обновить номера «30», «19» и т. Д. Динамически? Я застрял там, пожалуйста, помогите.

.endorsements {
  background: #f0f0f0;
  border-left: 20px solid #49a9e1;
  display: block;
  margin: 10px;
}

.endorsements::after {
  content: '+'
}
<article>
  <section id="endo">
    <button aria-label="css" class="endorsements"> CSS </button>
    <button aria-label="web" class="endorsements"> Web Development </button>
        <button aria-label="SEO" class="endorsements"> SEO </button>
        <button aria-label="HTML" class="endorsements"> HTML </button>
  </section>
</article>

Может кто-нибудь помочь мне воссоздать эту спецификацию?Я не уверен, что использование :: after будет хорошей идеей?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Итак, как я сказал в своем комментарии, я бы порекомендовал использовать что-то вроде объекта, который можно зациклить для создания вашего HTML (На самом деле, если бы вы были более опытными, я бы порекомендовал что-то вроде Angular - это потрясающе для вещей как это).

Также обратите внимание, что я бы не использовал псевдоэлемент before:: для числа, просто поместил его в div. См. Ниже;

$(document).ready(function () {
        let endorsements = {
            0: {
                name     : "CSS",
                count    : 30,
                endorsers:
                    [
                        "link/to/image.png",
                        "link/to/second/image.jpg"
                    ]
            },
            1: {
                name     : "Web Development",
                count    : 16,
                endorsers: [
                    "link/to/image.png",
                    "link/to/second/image.jpg"
                ],
            }
        };

        let html    = "";
        let element = $("#endorsements");

        for (let i in endorsements) {
            html += `<div class="endorsement"><div class="count">${endorsements[i].count}</div><div class="name">${endorsements[i].name}</div></div>`
        }

        element.html(html);
    })
.endorsement {
            width            : 100%;
            background-color : #DDDDDD;
            display          : flex;
            align-items      : center;
        }

        .count {
            width            : 30px;
            height           : 30px;
            background-color : #3498DB;
            color            : white;
            text-align       : center;
            line-height      : 30px;
            display          : block;
            float            : left;
            margin-right     : 10px;
        }

        .name::after {
            content : "+";
            color   : #AAAAAA;
            margin-left: 10px;
        }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="endorsements">

</div>
0 голосов
/ 03 апреля 2019

Я бы собрал все это в for-loop, а под "всем" я подразумеваю каждую строку.

Добавьте значение к data-attribute и используйте concent: attr(data-attribute) дляотобразите число.

Если вы не создаете структуру HTML строка за строкой, выполните document.querySelectAll('.endorsement') [править] после того, как вы получили данные от сервера, прокрутите ответ и добавьте каждый data-attributeвыборочно.

[править] Кроме того, удалите border-left: 20px solid #49a9e1 из .endorsement;

.endorsements {
  background: #f0f0f0;
  display: block;
  margin: 10px;
}

.endorsements::before {
  content: attr(data-number);
  height: 20px;
  width: 20px;
  background-color: #4faadf;
  display: flex;
  justify-content: center;
  align-items: center;
  color: #fff;
  font-weight: bold;
  font-size: 0.9em;
  border-top-left-radius: 2px;
  border-bottom-left-radius: 2px;
}

<!-- Example of how the DOM looks like after javascript have added the attribute 'data-number'. -->

<article>
  <section id="endo">
    <button data-number="30" aria-label="css" class="endorsements"> CSS </button>
    <button data-number="19" aria-label="web" class="endorsements"> Web Development </button>
    <button data-number="18" aria-label="SEO" class="endorsements"> SEO </button>
    <button data-number="13" aria-label="HTML" class="endorsements"> HTML </button>
  </section>
</article>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...