Розмір шрифту щодо роздільної здатності екрана користувача?


84

У мене є веб-сайт з гнучким вмістом, і меню становить 20% його ширини. Я хочу, щоб розмір шрифту в меню вимірювався належним чином, щоб він завжди відповідав ширині поля та ніколи не переносився на наступний рядок. Я думав використовувати "em" як одиницю, але це відносно розміру шрифту браузера, тому, коли я змінюю роздільну здатність, розмір шрифту залишається незмінним.

Спробував також бали та відсотки. Нічого не працює, як мені це потрібно ...

Будь ласка, дайте мені підказку про те, як діяти далі.

Відповіді:


51
@media screen and (max-width : 320px)
{
  body or yourdiv element
  {
    font:<size>px/em/rm;
  }
}
@media screen and (max-width : 1204px)
{
  body or yourdiv element
  {
    font:<size>px/em/rm;
  }
}

Ви можете вказати його вручну залежно від розміру екрана. Просто подивіться на інший розмір екрана та додайте вручну розмір шрифту.


16
Важливе зауваження: Вам потрібно додати це до голови html. <meta name="viewport" content="width=device-width" /> Крім того, ви можете використовувати max-widthзамість того, max-device-widthщоб відчувати себе більш чуйним.
Sheharyar

@ user65165 Я не зрозумів того, що ти намагаєшся сказати?
Arpit Srivastava

max-device-width він не працює. Тільки максимальна ширина працює, коли я налаштовую екран браузера.
Раміса Анжум Адіті

54

Ви можете використовувати em, %, px. Але в поєднанні з media-queries Див. Це посилання, щоб дізнатись про медіа-запити. Крім того , CSS3 мають деякі нові значення для калібрування речі по відношенню до поточного розміру вікна перегляду: vw, vhі vmin. Дивіться посилання про це.


28
vw, vh, vminРок цієї відповіді.
Frank Lämmer

1
Зараз це правильна відповідь, враховуючи, що одиниці вікна перегляду підтримуються кожним * браузером: caniuse.com/#feat=viewport-units .
каззер

не забувайтеvmax
live2

32

Новий шлях

Є кілька способів досягти цього.

CSS3 підтримує нові розміри, що відносно порту перегляду. Але це не працює в android.

  1. 3.2vw = 3.2% ширини області перегляду
  2. 3,2 vh = 3,2% висоти області перегляду
  3. 3.2vmin = менший на 3.2vw або 3.2vh
  4. 3.2vmax = більший на 3.2vw або 3.2vh

    body
    {
        font-size: 3.2vw;
    }
    

див. css-tricks.com / .... а також подивіться на caniuse.com / ....

Старий Шлях

  1. Використовуйте медіа-запит, але потрібні розміри шрифту для кількох точок зупинки

    body
    {
        font-size: 22px; 
    }
    h1
    {
       font-size:44px;
    }
    
    @media (min-width: 768px) 
    {
       body
       {
           font-size: 17px; 
       }
       h1
       {
           font-size:24px;
       }
    }
    
  2. Використовуйте розміри у % або rem . Просто змініть базовий розмір шрифту, і все зміниться. На відміну від попереднього, ви можете просто змінити шрифт тіла, а не h1 щоразу, або дозволити розмір базового шрифту за замовчуванням для пристрою та відпочивати все в них.

    • “Root Ems” (rem) : “rem” - це масштабована одиниця. 1rem дорівнює розміру шрифту тіла / html, наприклад, якщо розмір шрифту документа 12pt, 1em дорівнює 12pt. Кореневі Ems мають масштабований характер, тому 2em дорівнює 24pt, .5em дорівнює 6pt тощо.

    • Відсоток (%) : Одиниця відсотка дуже нагадує одиницю “em”, за винятком кількох принципових відмінностей. Перш за все, поточний розмір шрифту дорівнює 100% (тобто 12pt = 100%). Використовуючи одиницю відсотка, ваш текст залишається повністю масштабованим для мобільних пристроїв та доступності.

див. kyleschaeffer.com / ....


font-size: 3.2vw працював у моєму випадку. Хоча не впевнений у підтримці браузера.
manpikin

"Em дорівнює поточному розміру шрифту, наприклад, якщо розмір шрифту документа 12pt, 1em дорівнює 12pt." Власне, emце відносно розміру шрифту контейнера. Це може призвести до несподіваної поведінки, коли для контейнера також встановлено розмір шрифту em... Щоб отримати розмір щодо шрифту документа, використовуйте rem.
Stijn de Witt

19

Я розробив гарне рішення JS, яке підходить для повністю адаптивного HTML (тобто HTML, побудованого з відсотками)

  1. Я використовую лише "em" для визначення розміру шрифту.

  2. Розмір шрифту html встановлено 10 пікселів:

    html {
      font-size: 100%;
      font-size: 62.5%;
    }
    
  3. Я викликаю функцію зміни розміру шрифту в готовому до документа:

// для цього потрібен JQuery

function doResize() {
    // FONT SIZE
    var ww = $('body').width();
    var maxW = [your design max-width here];
    ww = Math.min(ww, maxW);
    var fw = ww*(10/maxW);
    var fpc = fw*100/16;
    var fpc = Math.round(fpc*100)/100;
    $('html').css('font-size',fpc+'%');
}

цікаве рішення, непогано. Я перевірив, що я навчився, використовуючи те, як я використовую, але незважаючи на це, я зафіксував текст розміром 10 пікселів у вікнах розміру maxW, це нормально? але це? що таке "16" що це? var fpc = fw * 100/16;
Доменіко Монако


5

Не знаю, чому це складно. Я б зробив цей базовий javascript

<body onresize='document.getElementsByTagName("body")[0].style[ "font-size" ] = document.body.clientWidth*(12/1280) + "px";'>

Де 12 означає 12 пікселів із роздільною здатністю 1280. Ви вирішуєте, яке значення ви хочете тут



2

Я створив варіант https://stackoverflow.com/a/17845473/189411

де ви можете встановити мінімальний та максимальний розмір тексту щодо мінімального та максимального розміру вікна, який потрібно "перевірити". Крім того, ви можете перевірити розмір елемента dom, який відрізняється від поля, де ви хочете застосувати розмір тексту.

Ви змінюєте розмір тексту від 19 пікселів до 25 пікселів для елемента # size-2 на основі ширини 500px та 960px елемента # size-2

resizeTextInRange(500,960,19,25,'#size-2');

Ви змінюєте розмір тексту від 13 пікселів до 20 пікселів для елемента # size-1 на основі ширини елемента тіла 500 пікселів та 960 пікселів

resizeTextInRange(500,960,13,20,'#size-1','body');

повний код є https://github.com/kiuz/sandbox-html-js-css/tree/gh-pages/text-resize-in-range-of-text-and-screen/src

function inRange (x,min,max) {
    return Math.min(Math.max(x, min), max);
}

function resizeTextInRange(minW,maxW,textMinS,textMaxS, elementApply, elementCheck=0) {

    if(elementCheck==0){elementCheck=elementApply;}

    var ww = $(elementCheck).width();
    var difW = maxW-minW;
    var difT = textMaxS- textMinS;
    var rapW = (ww-minW);
    var out=(difT/100)*(rapW/(difW/100))+textMinS;
    var normalizedOut = inRange(out, textMinS, textMaxS);
    $(elementApply).css('font-size',normalizedOut+'px');

    console.log(normalizedOut);

}

$(function () {
    resizeTextInRange(500,960,19,25,'#size-2');
    resizeTextInRange(500,960,13,20,'#size-1','body');
    $(window).resize(function () {
        resizeTextInRange(500,960,19,25,'#size-2');
        resizeTextInRange(500,960,13,20,'#size-1','body');
    });
});

1

Не використовувати медіа-запити приємно, оскільки це дозволяє поступово масштабувати розмір шрифту.

Використання vwодиниць регулює розмір шрифту щодо розміру порту перегляду.

Безпосередньо перетворення vw одиниць у розмір шрифту ускладнить досягнення найкращого місця як для мобільних роздільних здатностей, так і для робочого столу.

Я рекомендую спробувати щось на зразок:

body {
    font-size: calc(0.5em + 1vw);
}

Кредит: CSS у глибину


0
<script>
function getFontsByScreenWidth(actuallFontSize, maxScreenWidth){
     return (actualFontSize / maxScreenWidth) * window.innerWidth;
}

// Example:
fontSize = 18;
maxScreenWidth = 1080;
fontSize = getFontsByScreenWidth(fontSize, maxScreenWidth)

</script>

Сподіваюся, це допоможе. Я використовую цю формулу для своєї гри Phase.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.