Уменьшение шрифта в зависимости от количества символов

Постараюсь быть краток и изложить всю суть проблемы: Во-первых, насколько я понял данную задачу реализовать с помощью html+css невозможно, и нужно будет прибегнуть к JS. У меня есть форум в котором заголовки на некоторой ширине занимают более двух строк, что для меня это выглядит совершенно неприемлемо.

Форум с заголовками

<div class="list-inner">                                                                                                            

<a class="unread" href="./viewtopic.php?t=10&amp;view=unread#unread"><i class="icon fa-circle fa-fw icon-red icon-md" aria-hidden="true"></i></a> 
<a href="./viewtopic.php?t=10" class="topictitle">Maximum Topic Title Length 90 Characters Hello People Welcome To Snapchat Chattin Topic XO</a>

^-Код отвечающий за отображение заголовка

Так как в JS я полный 0, хотелось бы получить помощь в написании скрипта, который будет уменьшать шрифт и учитывать следующие условия:

  1. Применяться скрипт будет на заданной ширине min-width:1198.5px and max-width:1365.5px.
  2. Если количество символов в заголовке больше 70, то данный заголовок получает новый класс, условно "topictitlemin", которому задается параметр font-size: 1em;

Если не сложно, распишите как можно подробнее, что как и куда, и где какая строчка за что будет отвечать, чтобы у меня было больше понимания как работает JS. Огромное вам спасибо за внимание и помощь!


Ответы (2 шт):

Автор решения: SwaD

Попробуйте так: Добавляем в тег <body>

<body onload="start()">

в js добавляем следующее

let links;

  function start() {
    links = document.getElementsByClassName('topictitle');
    check();
  }

  function check() {
    const wid = document.documentElement.clientWidth;
    if (wid >= 1198.5 && wid <= 1365.5) { //
      for (let i = 0; i < links.length; i++) {
        if (links[i].innerHTML.length > 70) {
          links[i].classList.add('topictitlemin');
        }
      }
    } else {
      for (let i = 0; i < links.length; i++) {
        links[i].classList.remove('topictitlemin')
      }
    }
  }

  window.onresize = () => {
    check();
  }

Скрипт будет срабатывать при загрузке страницы и так же при изменении размеров окна. Можно еще придумать какой нибудь флаг, что бы лишний раз не прогонять скрипты, ну например, что новый класс не добавлялся и еще раз его удалять нет смысла. Ну это уже вы сами оптимизируйте под свои потребности.

→ Ссылка
Автор решения: Artem Platonov

Дооптимизировал :)

<body onload="fix(topictitle)">

<script>
function fix(topictitle) {
        tegi=document.getElementsByClassName(topictitle);
        for(i=0;i<tegi.length;i++){
          if (tegi[i].innerHTML.length > 77)
             tegi[i].classList.add('topictitlemin');
        }}}
</script>

@media only screen and (min-width: 1198.5px) and (max-width: 1365.5px)
.topictitle.topictitlemin {
    font-size: 1em;
}
→ Ссылка