CSSでmin-font-sizeを設定する方法


82

HTMLページのすべての要素に最小フォントサイズを設定したいと思います。

たとえば、フォントサイズが12px未満の要素がある場合、それらは12pxに変更されます。
ただし、フォントサイズが12pxの要素がある場合、それらは変更されません。

CSSでそれを行う方法はありますか?

回答:


2

いいえ。プロパティをbody使用して基本フォントサイズを設定できますがfont-size、それ以降に小さいサイズを指定すると、その要素の基本ルールが上書きされます。あなたが探していることをするために、あなたはJavascriptを使う必要があるでしょう。

ページ上の要素を繰り返し処理し、次のようなものを使用して小さいフォントを変更できます。

$("*").each( function () {
    var $this = $(this);
    if (parseInt($this.css("fontSize")) < 12) {
        $this.css({ "font-size": "12px" });   
    }
});

これが完了したことを確認できるフィドルです:http//jsfiddle.net/mifi79/LfdL8/2/


サイズが12px未満のjQuery要素を見つける簡単な方法はありますか?
nrofis 2014年

@ nrofis-確かに、上記の私の答えの編集を参照してください。乾杯!
mifi79 2014年

11
ページ上のすべての要素を繰り返し処理してCSSプロパティを変更することは、パフォーマンスの観点からは非常に悪い考えのように思われます。私はリフローをトリガーするものについての専門家ではありませんが、このアプローチでは誤ってページをリフローする可能性があります。このアプローチはお勧めしません。
Avand Amiri

私は@AvandAmiriを使用しています-これは、この種の考え方がページ上でこのような他の多くのソリューションにつながり、パフォーマンスの低いサイトやメモリリークにつながり、アプリがクラッシュするという意味で悪いアプローチです。これに対する本当の答えは(font-size maxが合法的に使用できるものになるまで)アーキテクチャを強化することです-適切に動作する優れたシステムを設計して実装します。「偶発的」なフォントサイズがあってはなりません。
dudewad 2015年

1
あなたは、フォントサイズは10pxの下に行きたくない場合は、@AndersLindénは、その場合には、例えば、メディアクエリの最小フォントサイズを設定します p{ font-size: 1vw } @media (max-width: 1000px){ p{ font-size: 10px } }
nHaskins

213

CSS3には、そのためのシンプルですが素晴らしいハックがあります。

font-size:calc(12px + 1.5vw);

これは、calc()の静的部分が最小値を定義するためです。動的部分が0に近い値に縮小する場合でも。


20
素晴らしいハック!

1
わたしは、あなたを愛しています。これはすごいです。
ルークテイラー

4
@StefanSteiger、これにはメディアクエリを使用できます:(a)media(max-width:610px)...
Adam Wallner

2
鮮やかさ!まさに私が必要としていたもの。ありがとうございました!
spedley 2016

6
これは素晴らしいハックですが、サイズが最小値を超えるとフォントサイズに影響するため、これは本当に解決策ではないと思います。そのため12px、常にその余分なもの(この場合)に耐える必要があります。
トムワイリー2017

56

2019年12月中旬の時点で、CSS4 min / max-functionはまさにあなたが望むものです:(
注意し て踏んでください、これは非常に新しく、古いブラウザ(別名IEとmsEdge)はまだそれをサポートしていません)
(現在サポートされていますChromium79およびFirefoxv75)

https://developer.mozilla.org/en-US/docs/Web/CSS/min
https://developer.mozilla.org/en-US/docs/Web/CSS/max

例:

blockquote {
    font-size: max(1em, 12px);
}

そうすれば、フォントサイズは1em(1em> 12pxの場合)になりますが、少なくとも12pxになります。

残念ながら、この素晴らしいCSS3機能はまだどのブラウザでもサポートされていませんが、これがすぐに変更されることを願っています!

編集:

これは以前はCSS3の一部でしたが、その後CSS4用に再スケジュールされました。2019年12月11日の
時点で、サポートはChrome / Chromium 79(AndroidおよびAndroid WebViewを含む)に到着しました。また、Opera66およびSafari11.1(iOSを含む)を含むMicrosoft Chredge、別名Anaheimにもサポートが到着しました。


7
真剣に、なぜ標準委員会は私の仕事を実際に実行可能にするものを常に削除するのですか?
マイケル

2
@ Michael、CSS WGは、主に実装者の関心や優先順位の欠如のためにものを削除します。最終的なW3C勧告でCSS機能を取得するには、2つの独立した実装が必要です。論文を書くことに意味はなく、誰もそれを現実世界のソフトウェアに押し込みたくないのです。あなたがブラウザのベンダーに依頼する必要がありますので...
JJ

2
素晴らしい発見!css変数とともに使用して、最小/最大を設定できます。例::root { --responsive-font-size-primary: min(2em, max(0.5em, 5vmin)); }使用法を簡単にする:font-size: var(--responsive-font-size-primary);
CoreyAlix19年

@Corey Alix:2019年12月11日に、そのサポートが到着しました。注意してスレッドを作成してください。Chromiumベース以外のすべてのブラウザはまだサポートしていません。しかし、Chromeでのサポートは非​​常に素晴らしいニュースです。
StefanSteiger19年

1
@Michael:朗報です-実装されました!(2019年12月中旬あたり)
StefanSteiger19年

8

私は少し遅れているようですが、この問題を抱えている他の人はこのコードを試してください

p { font-size: 3vmax; }

好みのタグとサイズを使用してください(3を置き換えてください)

p { font-size: 3vmin; }

最大サイズに使用されます。


5
vmaxとvminは、実際には、視点/ページサイズに関連する値を指定するために使用されます。最小値と最大値は、フォントサイズの最小値または最大値ではなく、最小/最大ビューポートを参照します。これは、opが求めていたものです。(たとえば、高さがビューポートの幅よりも大きい場合、vmaxは100vmax =ビューポートの高さおよび100vmin =ビューポートの幅に等しい)
Chaim

8

メディアクエリを使用します。例:これは元のサイズが1.0vwを使用しているものですが、1000に達すると文字が小さすぎるので、拡大します

@media(max-width:600px){
    body,input,textarea{
         font-size:2.0vw !important;
    }
}

私が取り組んでいるこのサイトは、500pxを超えると応答しませんが、さらに必要になる場合があります。このソリューションの利点は、スーパーミニ文字を使用せずにフォントサイズのスケーリングを維持し、それをjsフリーに保つことができることです。


1
うーん。これにより、要素がウィンドウの解像度に関連付けられますね。つまり、一般に、ページの要素ごとに個別のメディアクエリが必要になります。
マイケル

4

CSSには、上限と下限の間の値を保持するclamp()関数があります。クランプ()関数を使用すると、定義された最小値と最大値の間の値の範囲で中間値を選択できます。

それは単に3つの次元を取ります:

  1. 最小値。
  2. リストアイテム
  3. 推奨値最大許容値。

以下のコードを試して、ウィンドウのサイズ変更を確認してください。これにより、コンソールに表示されるフォントサイズが変更されます。最大値150pxと最小値を設定します100px

$(window).resize(function(){
    console.log($('#element').css('font-size'));
});
console.log($('#element').css('font-size'));
h1{
    font-size: 10vw; /* Browsers that do not support "MIN () - MAX ()" and "Clamp ()" functions will take this value.*/
    font-size: max(100px, min(10vw, 150px)); /* Browsers that do not support the "clamp ()" function will take this value. */
    font-size: clamp(100px, 10vw, 150px);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<center>
  <h1 id="element">THIS IS TEXT</h1>
</center>


3

CSSソリューション:

.h2{
  font-size: 2vw
}
@media (min-width: 700px) {
  .h2{
    /* Minimum font size */
    font-size: 14px
  }
}
@media (max-width: 1200px) {
  .h2{
    /* Maximum font size */
    font-size: 24px
  }
}

scssミックスインが必要な場合に備えて:

///
/// Viewport sized typography with minimum and maximum values
///
/// @author Eduardo Boucas (@eduardoboucas)
///
/// @param {Number}   $responsive  - Viewport-based size
/// @param {Number}   $min         - Minimum font size (px)
/// @param {Number}   $max         - Maximum font size (px)
///                                  (optional)
/// @param {Number}   $fallback    - Fallback for viewport-
///                                  based units (optional)
///
/// @example scss - 5vw font size (with 50px fallback),
///                 minumum of 35px and maximum of 150px
///  @include responsive-font(5vw, 35px, 150px, 50px);
///

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

1

プレーンCSSでは不可能
ですが、次のようなかなり高価なjQuery操作を実行できます。

jsBinデモ

$('*').css('fontSize', function(i, fs){
  if(parseInt(fs, 10) < 12 ) return this.style.fontSize = "12px";
});

グローバルセレクター *を使用する代わりに、(可能であれば)セレクターをより具体的にすることをお勧めします。


1

CSSプロパティはして削除CSSフォントモジュールレベル4仕様(とブラウザ私の知る限りでは実装されません)から。また、CSSワーキンググループは、まだ最大のブラウザーサポートがないCSSの例を置き換えたため、ブラウザーがサポートするのを待つ必要があります。https://developer.mozilla.org/en-US/docs/Web/CSS/clamp#Examplesの例を参照してくださいfont-min-sizefont-max-sizefont-size: clamp(...)


0

上記のコメントから判断すると、jQueryでこれを実行しても問題ありません—ここに行きます:

// for every element in the body tag
$("*", "body").each(function() {
  // parse out its computed font size, and see if it is less than 12
  if ( parseInt($(this).css("font-size"), 10) < 12 )
    // if so, then manually give it a CSS property of 12px
    $(this).css("font-size", "12px")
});

これを行うためのよりクリーンな方法は、CSSにfont-size:12pxを設定する「min-font」クラスを設定し、代わりにクラスを追加することです。

$("*", "body").each(function() {
  if ( parseInt($(this).css("font-size"), 10) < 12 )
    $(this).addClass("min-font")
});

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.