DevGang
Авторизоваться

Стилизация псевдоэлемента CSS с помощью JavaScript

В JavaScript вы не сможете сделать какой-нибудь селектор запросов, например:

document.querySelector("div::after");

Но с помощью переменных CSS вы можете изменять стили этих селекторов с помощью JavaScript!

В CSS выберите имя переменной и присвойте его чему-нибудь:

div::after {
	/* 50px is the default value if --somewidth doesn't exist */
	width: var(--somewidth, 50px);
}

А в JavaScript используйте функцию setProperty, чтобы присвоить значение этой переменной!

// this is just grabbing a div, you can change it to select any element
const element = document.getElementsByTagName("div")[0];

element.style.setProperty("--somewidth", "50%");

Ну вот и всё! При необходимости вы можете усложнить этот процесс. Обратите внимание на строку 38 в CSS и строку 25 в JavaScript!

<h1>My Goal: $5,000</h1> <!-- Update this -->

<p>Currently at <span id="status">0%</span> of our goal!</p>

<div id="amount"></div>

<p>Latest activity: <span id="activity">wee</span></p>
html {
  font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
  font-size: 1.3em;
  max-width: 40rem;
  padding: 2rem;
  margin: auto;
  line-height: 1.5rem;
}

div {
  position: relative;
  margin: 10px auto;
  width: clamp(320px, 100%, 500px);
  height: 100px;
  border: 5px solid black;
  border-radius: 100px;
  overflow: hidden;
}

div::before {
  display: block;
  content: '';
  width: 100%;
  height: 50%;
  background-color: #ffffff;
  opacity: 1;
  background-size: 50px 50px;
  background-image:  repeating-linear-gradient(to right, #000000, #000000 2px, rgba(255,255,255,0) 2px, rgba(255,255,255,0));
  z-index: -1;
}

div::after {
  display: block;
  content: '';
  position: absolute;
  bottom: 0;
  background: rgba(228, 0, 43, .9);
  width: var(--perc, auto);
  height: 100px;
}

span {
  font-weight: bold;
}
// Add activities here (to the top) that have an amount
let activity = [
  { name: 'Conference talk', amount: '1500' },
  { name: 'Etsy sale', amount: '20' },
  { name: 'This is an example', amount: '250' },
];
// Update your goal amount here
const goalAmount = 5000;

// You can ignore the below
function updateAmount() {
  const maxAmount = goalAmount;
  let totalAmount = 0;

  for (let i = 0; i < activity.length; i++) {
    totalAmount += parseInt(activity[i].amount, 10);
  }
  
  const percentage = (totalAmount / maxAmount) * 100;

  const amountDiv = document.getElementById('amount');
  const statusDiv = document.getElementById('status');
  const activityDiv = document.getElementById('activity');
  
  amountDiv.style.setProperty('--perc', percentage + '%');
  statusDiv.textContent = `$${totalAmount}, or ${Math.ceil(percentage)}%,`;
  
  activityDiv.textContent = activity[0].name;
}

updateAmount();

Источник:

#JavaScript #CSS #HTML
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу