Kích thước phông chữ so với độ phân giải màn hình của người dùng?


84

Tôi có một trang web linh hoạt và menu chiếm 20% chiều rộng của nó. Tôi muốn kích thước phông chữ của menu được đo chính xác để nó luôn vừa với chiều rộng của hộp và không bao giờ bị lệch sang dòng tiếp theo. Tôi đã nghĩ đến việc sử dụng "em" như một đơn vị nhưng nó liên quan đến kích thước phông chữ của trình duyệt, vì vậy khi tôi thay đổi độ phân giải, kích thước phông chữ vẫn giữ nguyên.

Cũng đã thử pts và tỷ lệ phần trăm. Không có gì hoạt động như tôi cần ...

Vui lòng cho tôi gợi ý về cách tiếp tục.

Câu trả lời:


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;
  }
}

Bạn có thể cung cấp thủ công tùy theo kích thước màn hình của màn hình, chỉ cần có giao diện với kích thước màn hình khác nhau và thêm kích thước phông chữ theo cách thủ công.


16
Lưu ý quan trọng: Bạn cần thêm phần này vào phần đầu html của mình. <meta name="viewport" content="width=device-width" /> Ngoài ra, bạn có thể sử dụng max-widththay vì max-device-widthđể có cảm giác 'phản hồi nhanh' hơn.
Sheharyar

@ user65165 Tôi không hiểu bạn đang cố nói gì?
Arpit Srivastava

max-device-width nó không hoạt động. Chỉ chiều rộng tối đa hoạt động khi tôi điều chỉnh màn hình trình duyệt.
Ramisa Anjum Aditi

54

Bạn có thể sử dụng em, %, px. Nhưng kết hợp với media-queries Xem liên kết này để tìm hiểu về truy vấn phương tiện. Ngoài ra, CSS3 có một số giá trị mới cho kích thước điều tương đối so với kích thước khung nhìn hiện tại: vw, vh, và vmin. Xem liên kết về điều đó.


28
vw, vh, vminĐá câu trả lời này.
Frank Lämmer

1
Đây là câu trả lời chính xác ngay bây giờ, vì các đơn vị khung nhìn được hỗ trợ bởi mọi * browser: caniuse.com/#feat=viewport-units .
cazzer

đừng quênvmax
trực tiếp 2

31

Cách mới

Có một số cách để đạt được điều này.

CSS3 hỗ trợ các thứ nguyên mới có liên quan đến cổng xem. Nhưng điều này không hoạt động trong Android.

  1. 3.2vw = 3.2% chiều rộng của khung nhìn
  2. 3.2vh = 3.2% chiều cao của khung nhìn
  3. 3.2vmin = Nhỏ hơn 3.2vw hoặc 3.2vh
  4. 3.2vmax = Lớn hơn 3.2vw hoặc 3.2vh

    body
    {
        font-size: 3.2vw;
    }
    

xem css-tricks.com / .... và cũng xem caniuse.com / ....

Cách cũ

  1. Sử dụng truy vấn phương tiện nhưng yêu cầu kích thước phông chữ cho một số điểm ngắt

    body
    {
        font-size: 22px; 
    }
    h1
    {
       font-size:44px;
    }
    
    @media (min-width: 768px) 
    {
       body
       {
           font-size: 17px; 
       }
       h1
       {
           font-size:24px;
       }
    }
    
  2. Sử dụng thứ nguyên theo % hoặc rem . Chỉ cần thay đổi kích thước phông chữ cơ bản, mọi thứ sẽ thay đổi. Không giống như trước đó, bạn chỉ có thể thay đổi phông chữ nội dung chứ không phải h1 mọi lúc hoặc để kích thước phông chữ cơ sở thành mặc định của thiết bị và đặt tất cả trong em.

    • “Root Ems” (rem) : “rem” là một đơn vị có thể mở rộng. 1rem bằng với kích thước phông chữ của body / html, ví dụ: nếu kích thước phông chữ của tài liệu là 12pt thì 1em bằng 12pt. Root Ems có bản chất là có thể mở rộng, vì vậy 2em sẽ bằng 24pt, .5em sẽ bằng 6pt, v.v.

    • Phần trăm (%) : Đơn vị phần trăm giống như đơn vị “em”, tiết kiệm cho một vài khác biệt cơ bản. Đầu tiên và quan trọng nhất, kích thước phông chữ hiện tại bằng 100% (tức là 12pt = 100%). Trong khi sử dụng đơn vị phần trăm, văn bản của bạn vẫn có thể mở rộng hoàn toàn cho các thiết bị di động và cho khả năng truy cập.

xem kyleschaeffer.com / ....


font-size: 3.2vw đã hoạt động trong trường hợp của tôi. Mặc dù không chắc chắn về hỗ trợ trình duyệt.
manpikin

"Ví dụ: một em bằng với kích thước phông chữ hiện tại, nếu kích thước phông chữ của tài liệu là 12pt, 1em bằng 12pt." Trên thực tế, emcó liên quan đến kích thước phông chữ của vùng chứa. Điều này có thể dẫn đến hành vi không mong muốn khi vùng chứa cũng có kích thước phông chữ được đặt trong em... Để có được kích thước liên quan đến phông chữ tài liệu, hãy sử dụng rem.
Stijn de Witt

19

Tôi đã phát triển một giải pháp JS tốt - phù hợp với HTML hoàn toàn đáp ứng (tức là HTML được xây dựng với phần trăm)

  1. Tôi chỉ sử dụng "em" để xác định kích thước phông chữ.

  2. Kích thước phông chữ html được đặt thành 10 pixel:

    html {
      font-size: 100%;
      font-size: 62.5%;
    }
    
  3. Tôi gọi một chức năng thay đổi kích thước phông chữ trên tài liệu sẵn sàng:

// điều này yêu cầu 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+'%');
}

giải pháp thú vị, không phải là xấu. Tôi đã kiểm tra tôi đã học được bằng cách thực hiện cách tôi sử dụng, nhưng tôi đã sửa lỗi này trên văn bản kích thước 10px trên các cửa sổ kích thước maxW, nó ổn chứ? nhưng điều này? "16" là gì đây là gì? var fpc = fw * 100/16;
Domenico Monaco


5

Không chắc tại sao điều này lại phức tạp. Tôi sẽ làm javascript cơ bản này

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

Trong đó 12 có nghĩa là 12px ở độ phân giải 1280. Bạn quyết định giá trị bạn muốn ở đây



2

Tôi đã tạo một biến thể của https://stackoverflow.com/a/17845473/189411

nơi bạn có thể đặt kích thước văn bản tối thiểu và tối đa liên quan đến kích thước tối thiểu và tối đa của hộp mà bạn muốn kích thước "kiểm tra". Ngoài ra, bạn có thể kiểm tra kích thước của phần tử dom khác với hộp mà bạn muốn áp dụng kích thước văn bản.

Bạn thay đổi kích thước văn bản từ 19px đến 25px trên phần tử # size-2, dựa trên chiều rộng 500px và 960px của phần tử # size-2

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

Bạn thay đổi kích thước văn bản từ 13px đến 20px trên phần tử # size-1, dựa trên chiều rộng 500px và 960px của phần tử body

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

mã hoàn chỉnh ở đó 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

Không sử dụng truy vấn phương tiện là tốt vì nó cho phép mở rộng kích thước phông chữ dần dần.

Việc sử dụng vwcác đơn vị sẽ điều chỉnh kích thước phông chữ so với kích thước cổng xem.

Việc chuyển đổi trực tiếp vwcác đơn vị thành kích thước phông chữ sẽ làm cho việc chuyển đổi đơn vị trở nên khó khăn đối với cả độ phân giải di động và máy tính để bàn.

Tôi khuyên bạn nên thử một cái gì đó như:

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

Tín dụng: CSS In Depth


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

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

</script>

Hy vọng điều này có thể giúp cho bạn. Tôi đang sử dụng công thức này cho trò chơi Giai đoạn của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.