div,
div p {
  -webkit-transition: all .3s ease;
  -moz-transition: all .3s ease
}
div {
  border: 1px solid #bababa;
  display: block;
  width: 155px;
  height: 30px;
  padding: 10px;
  transition: all .3s ease
}
div p {
  display: block;
  position: relative;
  margin: 0;
  overflow-y: hidden;
  height: 35px;
  transition: all .3s ease
}
div p:after {
  position: absolute;
  top: 18px;
  right: 30px;
  content: ' ...';
}
div:hover {
  height: 145px
}
div:hover p {
  white-space: normal;
  overflow: none;
  height: 100%;
}
div:hover p:after {
  display: none
}white-space: nowrap;
  
  <div>
    <p>“Чайная коллекция” безалкогольный негазированный напиток,<br> “Зеленый чай с ароматом лимона” пастеризованный,075л</p>
</div>      div {
  border: 1px solid gray;
  display: block;
  width: 155px;
  height: 30px;
  padding: 10px;
  text-align: justify;
  -webkit-transition: all 1s ease;
  -moz-transition: all 1s ease;
  transition: all 1s ease
}
div p {
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  -o-text-overflow: ellipsis;
     text-overflow: ellipsis
}
div:hover {
  height: 90px
}
div:hover p {
  white-space: normal;
  overflow: none
}      var links = document.getElementsByClassName('link');
var input = document.getElementById('textLink');
for (var i = 0; i < links.length; i++) {
    links[i].addEventListener('click', funct);
}
function funct() {
    input.value = this.getAttribute('href');  //запишет текст из href
    input.value = this.innerHTML; //запишет текст из а (Инфо1, 2...)
}      
  
  const input = document.querySelector('#textLink');
const buttonSelector = '.link';const getText = el => el.innerText;
// или
const getText = el => el.textContent;
// или (будет работать как надо, пока элемент остаётся ссылкой)
const getText = el => el.text;
// или (будет работать как надо, пока вложенные элементы не появятся)
const getText = el => el.innerHTML;document.addEventListener('click', ({ target: t }) =>
  (t = t.closest(buttonSelector)) &&
  (input.value = getText(t))
);document.querySelectorAll(buttonSelector).forEach(function(n) {
  n.addEventListener('click', this);
}, e => input.value = getText(e.currentTarget));      
  
  const parentSelector = '.parent';
const className = 'custom';document.querySelectorAll(`${parentSelector} > .${className}`).forEach(n => {
  n.classList.remove(className);
});
// или
for (const n of document.querySelector(parentSelector).children) {
  n.className = n.className.replace(RegExp(`(^| )${className}(?= |$)`), '').trim();
}      
  
  .colors вызывайте функцию пересчёта:$('.colors').on('click', '.color', function() {
  $(this).toggleClass('checked');
  calculate();
});.colors .checked и суммирование их data-price:total += $('.colors .checked', this)
  .get()
  .reduce((acc, n) => acc + +n.dataset.price, 0);      <style>
div{font-weight: bold}
div::before {
    content: attr(data-1);
    font-weight: normal;
}
div::after {
    content: attr(data-2);
    font-weight: normal;
}
</style><div data-1="Вот он" data-2="текст!">
выделенный
</div>
25%+пробел+25%+пробел+25%+пробел+25% в итоге дают больше 100%      
  
  document.getElementById('block').style.cssText= `
    opacity: 1;
    border: 1;
    color: black;
`