CSS에서 최소 글꼴 크기를 설정하는 방법


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

다음은 완료 한 것을 볼 수있는 Fiddle입니다. http://jsfiddle.net/mifi79/LfdL8/2/


크기가 12px 미만인 jQuery 요소로 찾는 간단한 방법이 있습니까?
nrofis 2014-06-01

@nrofis-위의 내 대답에 대한 편집을 참조하십시오. 건배!
mifi79 2014-06-01

11
페이지의 모든 요소를 ​​반복하고 CSS 속성을 변경하는 것은 성능 관점에서 보면 정말 나쁜 생각처럼 보입니다. 나는 리플 로우를 유발하는 것에 대한 전문가는 아니지만이 접근 방식을 사용하면 실수로 페이지를 많이 리플 로우 할 수 있습니다. 이 방법은 권장하지 않습니다.
Avand Amiri 2014 년

저는 @AvandAmiri와 함께 있습니다. 이런 종류의 생각이 페이지에서 이와 같은 많은 다른 솔루션으로 이어져 성능이 떨어지는 사이트와 앱을 충돌시키는 메모리 누수로 이어진다는 점에서 이것은 나쁜 접근 방식입니다. 이에 대한 진정한 대답은 (font-size max가 합법적으로 사용할 수있는 것이 될 때까지) 아키텍처를 강화하는 것입니다.-제대로 작동하는 좋은 시스템을 설계하고 구현하는 것입니다. 페이지에 "우연한"글꼴 크기가 없어야합니다.
dudewad 2015 년

1
@ AndersLindén이 경우 미디어 쿼리에 최소 글꼴 크기를 설정하십시오. 예를 들어 글꼴 크기가 10px 미만이되지 않도록하려면 다음과 같이하십시오. 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
사랑해. 굉장합니다.
Luke Taylor

4
@StefanSteiger, 당신은이를 위해 미디어 쿼리를 사용할 수있다 : (a)는 미디어 (최대 폭 : 610px) ...
아담 WALLNER

2
훌륭한! 정확히 내가 필요한 것. 감사합니다!
spedley

6
이것은 좋은 해킹이지만 크기가 최소값 이상일 때 글꼴 크기에 영향을 미치기 때문에 이것이 진정한 해결책이 아니라고 말하고 싶습니다. 따라서 항상 추가 12px(이 경우)를 참 아야합니다.
Tom Wyllie

56

12 월 중순 2019으로, CSS4의 최소 / 최대 기능 당신이 원하는 것을 정확히 :
(주의 트레드, 이것은 아주 새로운, IE & msEdge) 일명 이전 버전의 브라우저는 (아직 지원하지 않음)
(의로 지원 Chromium 79 및 Firefox v75)

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 , 지원 79 (안드로이드 포함하여, 안드로이드 웹보기에), 오페라 66, 사파리 11.1 포함 애너하임 일명 또한 같은 마이크로 소프트 Chredge에 크롬 / 크롬에 도착 (포함. 아이폰 OS)


7
진지하게, 왜 표준위원회는 내 일을 실제로 수행 할 수있게 만드는 것들을 항상 제거 하는가!?
Michael

2
@Michael, CSS WG는 대부분 구현 자의 관심이나 우선 순위가 없기 때문에 항목을 제거합니다. 최종 W3C 권장 사항에서 CSS 기능을 얻으려면 두 개의 독립적 인 구현이 필요합니다. 논문을 쓰는 데 아무런 의미가 없으며 아무도 그것을 실제 소프트웨어로 밀어 넣고 싶어하지 않습니다. 따라서 브라우저 공급 업체에 문의해야합니다 ...
jj

2
좋은 찾기! css 변수와 함께 사용하여 최소 / 최대를 설정할 수 있습니다. 예 : :root { --responsive-font-size-primary: min(2em, max(0.5em, 5vmin)); }사용법을 간단하게 :font-size: var(--responsive-font-size-primary);
Corey Alix

@Corey Alix : 멋지군요. 2019 년 12 월 11 일에 지원이 도착했습니다. 조심스럽게 스레드, 모든 비 Chromium 기반 브라우저는 아직 지원하지 않습니다. 그러나 Chrome에서의 지원은 매우 멋진 소식입니다.
Stefan Steiger 19

1
@Michael : 좋은 소식-이제 구현되었습니다! (2019 년 12 월 중순 기준)
Stefan Steiger

8

내가 조금 늦어 보이지만이 문제가있는 다른 사람들은이 코드를 시도하십시오.

p { font-size: 3vmax; }

원하는 태그와 원하는 크기를 사용하십시오 (3 개를 대체하십시오).

p { font-size: 3vmin; }

최대 크기에 사용됩니다.


5
vmax 및 vmin은 실제로 시점 / 페이지 크기와 관련된 값을 지정하는 데 사용됩니다. 최소 및 최대는 글꼴 크기의 최소 또는 최대가 아닌 최소 / 최대 뷰포트를 참조합니다. (예 : 높이가 뷰포트 너비보다 vmax보다 큰 경우 vmax = 뷰포트 높이 100vmax = 뷰포트 높이 100vmin = 뷰포트 너비)
Chaim

8

미디어 쿼리를 사용하십시오. 예 : 이것은 원래 크기를 사용하는 메신저가 1.0vw이지만 1000에 도달하면 문자가 너무 작아 져서 크기를 늘립니다.

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

내가 작업중인이 사이트는> 500px에 대해 응답하지 않지만 더 필요할 수 있습니다. 이 솔루션의 장점은 초소형 글자없이 글꼴 크기 조정을 유지하고 js를 무료로 유지할 수 있다는 것입니다.


1
으. 이것은 요소를 창의 해상도에 연결합니다. 그렇지 않습니까? 즉, 일반적으로 페이지의 각 요소에 대해 별도의 미디어 쿼리가 필요합니다.
Michael

4

CSS에는 상한과 하한 사이의 값을 보유하는 clamp () 함수가 있습니다. 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 mixin이 필요한 경우 :

///
/// 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

AFAIK 일반 CSS로는 불가능
하지만 다음과 같이 꽤 비싼 jQuery 작업을 수행 할 수 있습니다.

jsBin 데모

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

전역 선택기 를 사용하는 대신 *가능한 경우 선택기를 더 구체적으로 지정하는 것이 좋습니다.



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

-1

50px에서 완벽하게 작동합니다. 정적 및 최소 너비로 작동합니다.

font-size: calc(50px + 5vw);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.