Minimum yazı tipi boyutu ve maksimum yazı tipi boyutu diye bir şey var mı?


100

Tarayıcı penceresine yanıt veren bir div'de yazı tipi yapmaya çalışıyorum. Şimdiye kadar mükemmel çalıştı, ancak üst div'in a max-width/ 525px. Tarayıcının daha fazla yeniden boyutlandırılması, yazı tipinin yeniden boyutlandırılmasını durdurmaz. Bu, min-font-sizeya da diye bir şey max-font-sizeolup olmadığını ve böyle bir şey yoksa, benzer bir şeyi başarmanın bir yolu olup olmadığını merak etmeme neden oldu.

Yüzde kullanmanın font-sizeişe yarayacağını düşündüm , ancak metin parçası üst div'e göre ölçeklenmeyecek. İşte sahip olduğum şey:

Üst div için CSS:

.textField{
    background-color:rgba(88, 88, 88, 0.33);

    width:40%;
    height:450px;

    min-width:200px;
    max-width:525px;

    z-index:2;
}

Söz konusu metin parçası için CSS:

.subText{
    position:relative;
    top:-55px;
    left:15px;

    font-family:"news_gothic";
    font-size:1.3vw;
    font-size-adjust:auto;

    width:90%;

    color:white;

    z-index:1;
}

İnternette epey bir süre aradım ama boşuna.


İlk defa
vw'nin

Yanıtlar:


61

Hayır, minimum veya maksimum yazı tipi boyutu için CSS özelliği yoktur. Tarayıcılarda genellikle minimum yazı tipi boyutu ayarı vardır, ancak bu bir yazarın değil kullanıcının denetimi altındadır.

Ekran veya pencere genişliği gibi şeylere bağlı olarak bazı CSS ayarlarını yapmak için @mediasorguları kullanabilirsiniz . Bu tür ayarlarda, örneğin pencere çok darsa yazı tipi boyutunu belirli bir küçük değere ayarlayabilirsiniz.


Doğruysam, bağlantınızdaki bilgiler, bir koşul karşılandığında medya sorgularının belirtilen CSS'yi yürüteceğini söylüyor, bu durumda bağlantınız için koşul geçerli olacaktır max-width:600px;. Hatalı mıyım yoksa bağlantının arkasındaki bilgileri doğru anlamadım mı?
Toby van Kempen

4
@Toby van Kempen: Haklısınız, ancak bu durumda maksimum genişlik, rastgele bir öğenin boyutunu değil, ekran görüntü alanı boyutunu ifade eder. Bazı rasgele öğelerin stiline bağlı olarak CSS'yi değiştirmeniz gerekirse, bunu yapmak için medya sorgularını kullanamazsınız. Bir senaryoya ihtiyacınız olacak.
BoltClock

@BoltClock Yani, @mediatarayıcı penceresini ifade ediyor mu? Üst div veya tarayıcı penceresi piksel cinsinden belirli bir boyutta olduğunda yazı tipi boyutumun örneğin 20 piksel olmasını istediğimi nasıl bilecek?
Toby van Kempen

@Toby van Kempen: Her zaman tarayıcı penceresine, dolayısıyla "medya sorgularındaki" "medyaya" atıfta bulunacaktır .
BoltClock

1
Ah, anlıyorum. Öyleyse, eğer doğruysam, yazarsam, tarayıcı genişliği 600px'e eşit olduğunda @media (width:600px)aşağıdaki komut dosyasını çalıştıracak @media?
Toby van Kempen

114

Bunu bir formül kullanarak ve görüntü alanı genişliğini dahil ederek yapabilirsiniz.

font-size: calc(7px + .5vw);

Bu, minimum yazı tipi boyutunu 7px olarak ayarlar ve görüntü alanı genişliğine bağlı olarak bunu .5vw ile büyütür.

İyi şanslar!


3
AMAN TANRIM!!! Son 3 gündür sayılarla ve bunu yapmanın farklı yollarıyla oynuyorum. Size hiçbir şeyin gerçekten istediğini söylememe izin verin. Sonra cevabınızı buldum, cevabınızı css'me taktım ve "HORAYYYY" işe yarıyor ... Harika cevap Pitt. Teşekkürler.
2017

Minimum yazı tipi boyutu için harika bir numara. Merak ediyorum da benzer bir şey maksimum için yapılabilir mi ... Herhangi bir olumsuzluk olarak değerlendirilebileceği fikriyle bir ilgisi olabilir 0. Bazı iç içe geçmiş calce- postalar falan mı?
Lazar Ljubenović

2
Ters çevirin, yani font-size: calc (12px - .5vw)
roberrrt-s

Bu, LESS ile düzgün çalışmaz. Sanırım calc()ifade, LESS derlendiğinde ve basit bir pxdeğere çözüldüğünde işleniyor . Yeniden boyutlandırma yeniden hesaplanmaz. Fikirler mi yoksa düşünceler mi?
Devil's Advocate


64

CSS ile iyi çalışır.

Aynı sorunları yaşadım ve aşağıdaki gibi düzelttim.

Belirli bir genişlik ve üzerinde maksimum boyut için sabit bir "piksel" boyutu kullanın. Daha sonra farklı daha küçük genişlikler için ekranın yüzdesi olarak göreli bir "vw" kullanın.

Aşağıdaki sonuç, 960 pikselin altındaki ekranlarda kendini ayarlaması, ancak üzerinde sabit bir boyut tutmasıdır. Başlığa html belgesini eklemeyi unutmamak için sadece bir hatırlatma:

<meta name="viewport" content="width=device-width">

CSS'de örnek:

@media all and (min-width: 960px) {
h1{
    font-size: 50px;
  }
}

@media all and (max-width: 959px) and (min-width: 600px) {
h1{
    font-size: 5vw;
  }
}

@media all and (max-width: 599px) and (min-width: 50px) {
h1{
    font-size: 6vw;
  }
}

Umarım yardımcı olur!


2
Bu EN İYİ cevap olmalı !!
KaKa

neden her satırda 'tümü' var?
tibi

@tibi tümü ortam türünü ifade eder (veya: NEREDE uygulanacağını). seçeneklerin tümü, ekran, baskı ve konuşmadır. hepsi varsayılandır, bu yüzden burada biraz eski. mdn belgelerine bakın .
honk31

Evet! Bu mükemmel çalışıyor! İstediğim bir MAX yazı tipi boyutuydu ve bu mükemmel çalışıyor, teşekkürler.
todbott

9

Buraya biraz geç geliyorum, o kadar itibar görmüyorum, sadece aşağıdaki cevapların bir karışımını yapıyorum çünkü bunu bir proje için yapmak zorunda kaldım.

Öyleyse soruyu cevaplamak için: Bu CSS özelliği diye bir şey yoktur . Nedenini bilmiyorum ama bence bu mülkün kötüye kullanılmasından korktukları için, ancak ciddi bir sorun olabilecek herhangi bir kullanım durumu bulamıyorum.

Her neyse, çözümler nelerdir?

İki araç bunu yapmamızı sağlayacak: medya sorguları ve vw özelliği

1) CSS'de istediğimiz her adım için bir medya sorgusu yapmaktan, yazı tipini sabit bir miktardan başka bir sabit miktara değiştirmekten oluşan "aptal" bir çözüm var. İşe yarıyor, ama yapmak çok sıkıcı ve pürüzsüz bir doğrusal yönünüz yok.

2) AlmostPitt'in açıkladığı gibi, minimumlar için parlak bir çözüm var:

font-size: calc(7px + .5vw);

Burada minimum, görünüm genişliğinin% 0,5'ine ek olarak 7 piksel olacaktır. Bu zaten gerçekten harika ve çoğu durumda işe yarıyor . Herhangi bir medya sorgusu gerektirmez, sadece doğru parametreleri bulmak için biraz zaman harcamanız gerekir.

Bunun doğrusal bir fonksiyon olduğunu fark ettiğiniz gibi, temel matematik size parametreleri zaten iki noktanın bulduğunu öğrenir. Ardından, çok büyük ekranlar ve mobil sürüm için istediğiniz yazı tipi boyutunu piksel cinsinden düzeltin, ardından bilimsel bir yöntem yapmak isteyip istemediğinizi hesaplayın. Düşünce, kesinlikle gerekli değil ve deneyerek gidebilirsin.

3) Bir başlığın kesinlikle tek satır olmasını isteyen ve artık istemeyen çok sıkıcı bir müşteriniz olduğunu varsayalım (benim gibi). AlmostPitt çözümünü kullandıysanız, o zaman başınız belada çünkü yazı tipiniz büyümeye devam edecek ve sabit genişlikte bir kabınız varsa (1140px'de duran önyükleme veya büyük pencerelerde bir şey gibi). Burada ayrıca bir medya sorgusu kullanmanızı öneririm. Aslında, boyut istenmeyen hale gelmeden önce (pxMax) konteynırınızda işleyebileceğiniz maksimum piksel büyüklüğünü bulabilirsiniz. Bu maksimum değeriniz olacaktır. O zaman durdurmanız gereken tam ekran genişliğini bulmanız gerekir (wMax). (Doğrusal bir fonksiyonu kendi başınıza ters çevirmenize izin veriyorum).

Bundan sonra sadece yap

@media (min-width: [wMax]px) {
    h2{
        font-size: [pxMax]px;
    }
}

O zaman tamamen doğrusaldır ve yazı tipi boyutunuz büyümeyi durdurur! Önceki css özelliğinizi (calc ...) wMax altındaki bir medya sorgusuna koymanıza gerek olmadığına dikkat edin, çünkü medya sorgusu daha önemsiz kabul edilir ve önceki özelliğin üzerine yazılır.

Bunun için bir pasaj oluşturmanın yararlı olduğunu düşünmüyorum, çünkü bunu tam ekrana yapmakta zorlanacaksınız ve sonuçta roket bilimi değil.

Umarım bu başkalarına yardımcı olabilir ve çözümü için AlmostPitt'e teşekkür etmeyi unutmayın.


Calc () için doğru değerleri bulmak için bir formül önerebilir misiniz max(*a*px,, *b*vw)? Çünkü benim durumumda, saf bir toplamaya tahammül edemiyorum çünkü sonuç çok büyük, ama görünüşe göre a ve b'yi saf miktarlara göre bir şekilde azaltabileceğimi öneriyorsunuz - matematiği anlamakta güçlük çekiyorum ve ben yalnızca belirli bir vakaya değil, genel bir çözüme ihtiyacınız var.
Michael

Aklıma gelen tek iyi açıklama bir
görseldi

6

Bu aslında CSS4'te önerilmektedir

W3C'de çalışma taslağı

Alıntı:

Bu iki özellik, bir web sitesinin veya kullanıcının bir öğenin yazı tipi boyutunun bu iki özellikle sağlanan aralık içinde sıkıştırılmasını gerektirmesine olanak tanır. Hesaplanan değer font-size font-min-size ve font-max-size tarafından oluşturulan sınırların dışındaysa, font-size kullanım değeri bu iki özellikte belirtilen değerlere kenetlenir.

Bu aslında şu şekilde çalışır:

.element {
    font-min-size: 10px;
    font-max-size: 18px;
    font-size: 5vw; // viewport-relative units are responsive.
}

Bu kelimenin tam anlamıyla , yazı tipi boyutunun görüntü alanının genişliğinin% 5'i olacağı, ancak asla 10 pikselden küçük ve hiçbir zaman 18 pikselden büyük olmayacağı anlamına gelir .

Ne yazık ki, bu özellik henüz hiçbir yerde uygulanmadı (caniuse.com'da bile).


4
Harika. Bu yüzden bu proje uygulanana kadar birkaç yıl boyunca bu proje üzerinde çalışmayı bırakmalıyım ....: '- (
Michael

3

Sırt çantası mükemmeldir, ancak Gulp veya Grunt gibi araçlar oluşturmak için başvurmanıza gerek yoktur.

Minimum ve maksimum yazı tipi boyutlarını kolayca kontrol etmek için CSS Özel Özellikleri (CSS Değişkenleri) kullanarak bir demo yaptım .

Şöyle:

* {
  /* Calculation */
  --diff: calc(var(--max-size) - var(--min-size));
  --responsive: calc((var(--min-size) * 1px) + var(--diff) * ((100vw - 420px) / (1200 - 420))); /* Ranges from 421px to 1199px */
}

h1 {
  --max-size: 50;
  --min-size: 25;
  font-size: var(--responsive);
}

h2 {
  --max-size: 40;
  --min-size: 20;
  font-size: var(--responsive);
}

2

Bunlarla bazı pürüzsüz sonuçlar aldım. Sürekli parçalı bir işlev gibi 3 genişlik aralığı arasında sorunsuz bir şekilde akar.

@media screen and (min-width: 581px) and (max-width: 1760px){
    #expandingHeader {
        line-height:5.2vw;
        font-size: 5.99vw;
    }
    #tagLine {
        letter-spacing: .15vw;
        font-size: 1.7vw;
        line-height:1.0vw;
    }
}

@media screen and (min-width: 1761px){
    #expandingHeader {
        line-height:.9em;
        font-size: 7.03em;

    }
    #tagLine {
        letter-spacing: .15vw;
        font-size: 1.7vw;
        line-height:1.0vw;
    }
}

@media screen and (max-width: 580px){
    #expandingHeader {
        line-height:.9em;
        font-size: 2.3em;
    }
    #tagLine {
        letter-spacing: .1em;
        font-size: .65em;
        line-height: .10em;
    }
}

Bunun diğer cevaptan farkı nedir?
user193661

2

Minimum ve maksimum yazı tipi boyutlarını kontrol etmek için Sass'ı kullanabilirsiniz. İşte Eduardo Boucas'ın mükemmel bir çözümü.

https://eduardoboucas.com/blog/2015/06/18/viewport-sized-typography-with-minimum-and-maximum-sizes.html

@mixin responsive-font($responsive, $min, $max: false, $fallback: false) {
  $responsive-unitless: $responsive / ($responsive - $responsive + 1);
  $dimension: if(unit($responsive) == 'vh', 'height', 'width');
  $min-breakpoint: $min / $responsive-unitless * 100;

  @media (max-#{$dimension}: #{$min-breakpoint}) {
    font-size: $min;
  }

  @if $max {
    $max-breakpoint: $max / $responsive-unitless * 100;

    @media (min-#{$dimension}: #{$max-breakpoint}) {
      font-size: $max;
    }
  }

  @if $fallback {
    font-size: $fallback;
  }

  font-size: $responsive;
}

.limit-min {
  @include responsive-font(3vw, 20px);
}

.limit-min-max {
  @include responsive-font(3vw, 20px, 50px);
}

1

Erişilebilirlikle ilgili endişeler nedeniyle font boyutunun piksel olarak ayarlanmasının önerilmediğini lütfen unutmayın :

"Kullanıcı bazı tarayıcılarda yazı tipi boyutunu değiştiremediği için piksel cinsinden yazı tipi boyutlarının tanımlanmasına erişilemez. Örneğin, sınırlı görüşe sahip kullanıcılar yazı tipi boyutunu bir web tasarımcısı tarafından seçilen boyuttan çok daha büyük ayarlamak isteyebilir." (bkz. https://developer.mozilla.org/en-US/docs/Web/CSS/font-size )

Daha erişilebilir bir yaklaşım grubu olan font-size: 100%html bölgesi kullanıcının varsayılan boyut ayarına uyar ve boyutlandırma (zaman sonra ya yüzdeleri veya nispi birimleri kullanarak emya da rembir @media terimi ile, örneğin,).

(bkz. https://betterwebtype.com/articles/2019/06/16/5-keys-to-accessible-web-typography/ )


0

Evet, SVG'de bazı tarayıcılarda bazı kısıtlamalar var gibi görünüyor. Geliştirici, 8000 piksel ile sınırlandırır; Aşağıdaki dinamik olarak oluşturulan Grafik, örneğin Chrome'da başarısız olur.

Http://www.xn--dddelei-n2a.de/2018/test-von-svt/ deneyin

<svg id="diagrammChart"
     width="100%"
     height="100%"
     viewBox="-400000 0 1000000 550000"
     font-size="27559"
     overflow="hidden"
     preserveAspectRatio="xMidYMid meet"
>
    <g class="hover-check">
        <text class="hover-toggle" x="-16800" y="36857.506818182" opacity="1" height="24390.997159091" width="953959" font-size="27559">
            <set attributeName="opacity" to="1" begin="ExampShow56TestBarRect1.touchstart"
                 end="ExampShow56TestBarRect1.touchend">
            </set>
            <set attributeName="opacity" to="1" begin="ExampShow56TestBarRect1.mouseover"
                 end="ExampShow56TestBarRect1.mouseout">
            </set>
            Heinz: -16800
        </text>
        <rect class="hover-rect" x="-16800" y="12466.509659091" width="16800" height="24390.997159091" fill="darkred">
            <set attributeName="opacity" to="0.1" begin="ExampShow56TestBarRect1.mouseover"
                 end="ExampShow56TestBarRect1.mouseout">
            </set>
            <set attributeName="opacity" to="0.1" begin="ExampShow56TestBarRect1.touchstart"
                 end="ExampShow56TestBarRect1.touchend">
            </set>
        </rect>
        <rect id="ExampShow56TestBarRect1" x="-384261" y="0" width="953959" height="48781.994318182"
              opacity="0">
        </rect>

    </g>
</svg>

0

CSS min () ve max (), 2020'de oldukça iyi kullanım oranlarına sahip.

Aşağıdaki kod, [değişken değer] ve [minimum değer] değerlerinin en büyüğünü elde etmek için max () kullanır ve daha sonra ikisinden küçük olanı elde etmek için [maksimum değer] 'e karşı bunu min ()' e geçirir. Bu, izin verilen bir yazı tipi aralığı oluşturur (3.5rem minimum, 6.5rem maksimum, 6vw yalnızca arada olduğunda kullanılır).

font-size: min(max([variablevalue], [minimumvalue]), [maximumvalue]);
font-size: min(max(6vw, 3.5rem), 6.5rem);

Bunu özellikle font-awesome ile maksimum genişliğin ayarlandığı bir önyükleme kapsayıcı öğesi içindeki bir görüntü üzerinde bir video oynatma simgesi olarak kullanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.