Размер шрифта CSS динамически между интервалами

При маленьком размере экрана (мобильный) размер шрифта фиксируется на 14px. На действительно больших экранах размер шрифта установлен на 18px. Таким образом, он никогда не может быть ниже 14px и никогда не может быть выше 18px. Об этом позаботятся медиа-запросы.

Затем у нас есть золотая середина, где я хочу, чтобы размер шрифта был динамическим между 14px и 18px. Для этого я использую font-size: calc(.5vw + .85em);, который работает нормально, но не очень хорошо. Я не знаю, как рассчитать, чтобы он начинался с 14px и заканчивался на 18px между шириной экрана 40rem (16 * 40) и 65rem.

Любые идеи?

.wrap {
  font-size: 16px;
}

p {
  font-size: calc(.5vw + .85em);
}

p:before {
  content: 'Desktop: ';
  opacity: .5;
}

@media screen and (min-width: 65rem) {
  p {
    font-size: 18px;
  }
  p:before {
    content: 'Desktop large: ';
    opacity: .5;
  }
}

@media screen and (max-width: 40rem) {
  p {
    font-size: 14px;
  }
  p:before {
    content: 'Mobile: ';
    opacity: .5;
  }
}
<div class = "wrap">
  <p>
    text
  </p>
</div>

Я также добавил это сюда:https://jsfiddle.net/6ybkp7a1/6/

Пример

Когда я нахожусь на экране шириной 40.1rem (чуть выше 40rem), у меня должен быть размер шрифта, такой как 14.1px (или что-то еще), чуть выше 14px.

css-tricks.com/snippets/css/fluid-typography дает довольно хорошее объяснение задействованной математики.
CBroe 03.07.2018 14:29
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
3
1
125
2

Ответы 2

Установите другой медиа-запрос для min-width: 40rem вместе с другими медиа-запросами, которые у вас есть. Это должно позаботиться о размере экрана между этими двумя размерами экрана, которые вы добавили.

Вот рабочий пример (JSFiddle):

.wrap {
  font-size: 16px;
}

@media screen and (max-width: 40rem) {
  p {
    font-size: 14px;
  }
  p:before {
    content: 'Mobile: ';
    opacity: .5;
  }
}

@media screen and (min-width: 40rem) {
  p {
    font-size: calc(.5vw + .85em);
  }
  p:before {
    content: 'Desktop: ';
    opacity: .5;
  }
}

@media screen and (min-width: 65rem) {
  p {
    font-size: 18px;
  }
  p:before {
    content: 'Desktop large: ';
    opacity: .5;
  }
}
<div class = "wrap">
  <p>text</p>
</div>

Я думаю, это даст тот же результат, что и исходный код

Temani Afif 03.07.2018 13:49

Да. Хорошая попытка, но на самом деле проблема не решает. Например, когда я нахожусь на экране шириной 40.1rem, у меня должен быть размер шрифта чуть выше 14px, например 14.1px или что-то еще.

Jens Törnell 03.07.2018 13:51

Вы можете попробовать это. Он будет постепенно переходить от 14px к 18px.

Как это работает?

100vw - это наш размер экрана, поэтому он будет отличаться от 40rem и 65rem в нужном регионе. За вычетом 40rem у нас будет вариация между 0rem и 25rem. 25rem невероятно похож на (16px * 25) = 400px. Наша вариация теперь от 0 до 400px, и если мы разделим на 100 и добавим 14px, мы получим вариацию между 14px и 18px.

.wrap {
  font-size: 16px;
}

p {
  font-size: calc(14px + (100vw - 40rem)/100); /*or 14px + 1vw - 0.4rem */
}

p:before {
  content: 'Desktop: ';
  opacity: .5;
}

@media screen and (min-width: 65rem) {
  p {
    font-size: 18px;
  }
  p:before {
    content: 'Desktop large: ';
    opacity: .5;
  }
}

@media screen and (max-width: 40rem) {
  p {
    font-size: 14px;
  }
  p:before {
    content: 'Mobile: ';
    opacity: .5;
  }
}
<div class = "wrap">
  <p>
    text
  </p>
</div>

Вроде работает отлично! Спасибо! Я не совсем понимаю формулу, но, поскольку она основана на моих исходных числах, думаю, она должна работать во всех случаях. знак равно

Jens Törnell 03.07.2018 14:04

@ JensTörnell Я добавил дополнительные пояснения к ответу;)

Temani Afif 03.07.2018 14:13

Другие вопросы по теме