Froggyweb: В данном случае, если будет получен какой-то коэффициент в любом измерении, и который не нужно будет изменять при изменении размера шрифта инпута (один раз написал и забыл), то я в принципе соглашусь. Но у меня пока не вышло.
Матвей Мамонов: Для меня немного странно то, что порт более высокого разрешения (hdmi) по дефолту стоит вторым. У меня на матери два порта - DVI и древний игольчатый (не помню как называется). вот если в мать втыкать моники, то при дефолтных настройках биоса DVI (более "крутой") является основным (но на матери это конечно можно поменять в биосе).
Максим Ленский: Это не решение проблемы. При изменении размера шрифта все летит к черту.
Честно говоря, я с ходу тоже не смог придумать решение.
Может быть стоит продолжить мозговой штурм в таком ключе? - https://codepen.io/delphinpro/pen/EXyrvN?editors=0100
Не могу сообразить как вычислить коэффициент "-3" без подбора
Матвей Мамонов: Почти такая же система - 17 дюймов квадрат и большой широкоформатник. На видеокарте два DVI порта. У меня приоритет монитора зависит от того, к какому порту он подключен.
Т.е. порт №1 всегда главный, а порт №2 всегда второй.
Может возникнуть ситуация, когда две (три, четыре...) идущие подряд секции меньше высоты экрана и обе помещаются в область просмотра. У них процент видимости будет максимальный и одинаковый - 100. Тут уж вам решать, какую секцию назначить активной. Можно просто брать последнюю в списке, а можно разруливать отталкиваясь от направления скролла.
Если ближе к практике, то:
Сначала пишем функцию, которая определит координаты всех секций и их высоту и сохранит эти данные в массиве. Эту функцию вызовем сразу, плюс повесим ее на событие resize окна.
Далее определимся с определением "активная секция" - это секция, большая часть которой в процентном отношении находится в области видимости.
Теперь пишем функцию реакции на скролл страницы. В ней получаем значения scrollTop и height окна и в цикле пробегаем по массиву данных, собранных первой функцией.
На каждой итерации смотрим какой процент высоты секции приходится на область просмотра. Если section.top > windowScrollTop + windowHeight значит секция внизу и совсем еще не видна. Если section.bottom < windowScrollTop то секция уже вверху и тоже не видна. Дальше самое интересное. Нужно вычислить высоту той части секции, которая в данный момент видна на экране. Честно говоря, навскидку я сейчас не напишу вам формул, но, думаю, вам будет несложно нарисовать на бумажке чертежик и самому их вывести. В итоге на каждой итерации (т.е. для каждой секции) вы рассчитаете значение высоты видимой части. Секция, для которой это значение будет наибольшим и будет считаться активной. Ну и по индексу этой секции вы можете назначить определенный класс любому нужному блоку.
Для начала нужно формализовать это "при нахождении на каком то section"
Например,
Мы находимся на каком-то section, если
1) верхняя граница section совпала с верхней границей окна или ушла вверх за ее пределы
2) высота секции меньше высоты экрана и нижняя граница секции пересекла нижнюю границу экрана.
и т.д. Нужно математически учесть все варианты определения факта нахождения "на секции".
А дальше дело техники. Просто отслеживаем скролл и сравниваем scrollTop с координатами секций. Тут и ребенок справится =)