이런 식으로 할 수 있습니까?
max-width: calc(max(500px, 100% - 80px))
또는
max-width: max(500px, calc(100% - 80px)))
CSS에서?
이런 식으로 할 수 있습니까?
max-width: calc(max(500px, 100% - 80px))
또는
max-width: max(500px, calc(100% - 80px)))
CSS에서?
답변:
min(),, max()및 clamp()드디어 사용할 수 있습니다!
Firefox 75, Chrome 79 및 Safari 11.1 (제외 clamp) 부터 시작 합니다.
min()및 max()인수의 수를 가져 가라.
clamp()구문이 clamp(MIN, VAL, MAX)있으며 max(MIN, min(VAL, MAX)).
min()과 max()중첩 될 수 있습니다. 그것들은 calc()그것의 안팎 에서 사용될 수 있고 , 또한 수학 표현들을 포함 할 수 calc()있습니다. 즉, 그것들을 사용할 때 피할 수 있음을 의미 합니다.
따라서 원래 예제는 다음과 같이 작성할 수 있습니다.
max-width: max(500px, 100% - 80px);
아니 당신은 할 수 없습니다. max()와 min()CSS3 값 및 단위에서 제외되었다. 그러나 CSS4 Values and Units에 다시 도입 될 수 있습니다 . 현재 그들에 대한 calc()스펙은 없으며 스펙은 calc()함수 내에서 둘 중 하나가 유효하다는 것을 언급하지 않습니다 .
해결 방법은 width자체 를 사용하는 것입니다.
max-width: 500px;
width: calc(100% - 80px);
500px또는 100% - 80px. 솔루션은 최대 너비를 더 큰 500px경우에도 제한합니다 100% - 80px.
min()하므로 다른 사람에게 도움이 될 수 있습니다.
하지만 @ 데이비드 - 근대의 일종의 대답은 위의 "가까운"이었다 그것은 잘못되었습니다.
( 최대 너비 대신 최소 너비 를 원하는 경우 그의 솔루션을 사용할 수 있습니다 ).
이 솔루션은 그 대답에 그 @의 거트 - sønderby 코멘트가 보여 않는 일을 :
대답은 사용해야 min-width하지 max-width.
다음과 같이 말 했어야합니다.
min-width: 500px;
width: calc(100% - 80px);
예, 최소 너비 와 너비 를 사용하여 max () 함수 를 에뮬레이션 합니다.
다음은 코드 펜입니다 ( CodePen 에서 데모를보다 쉽게 볼 수 있으며 자신의 테스트를 위해 편집 할 수 있습니다).
.parent600, .parent500, .parent400 {
height: 80px;
border: 1px solid lightgrey;
}
.parent600 {
width: 600px;
}
.parent500 {
width: 500px;
}
.parent400 {
width: 400px;
}
.parent600 .child, .parent500 .child, .parent400 .child {
min-width: 500px;
width: calc(100% - 80px);
border: 1px solid blue;
height:60px;
}
.ruler600 {
width: 600px;
border: 1px solid green;
background-color: lightgreen;
height: 20px;
margin-bottom: 40px;
}
.width500 {
height: 20px;
width: 500px;
background-color: lightyellow;
float: left;
}
.width80 {
height: 20px;
width: 80px;
background-color: green;
float: right;
}
.parent600 .wrong, .parent500 .wrong, .parent400 .wrong {
max-width: 500px;
width: calc(100% - 80px);
border: 1px solid red;
height:60px;
}
<h2>(Min) min-width correctly gives us the Larger dimension: </h2>
<div class="parent600">
600px parent
<div class="child">child is max(500px, 600px - 80px) = max(500px, 520px) = 520px</div>
</div>
<div class="ruler600"><div class="width500">500px</div>20<div class="width80">80px</div></div>
<div class="parent500">
500px parent
<div class="child">child is max(500px, 500px - 80px) = max(500px, 420px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent400">
400px parent (child expands to width of 500px)
<div class="child">child is max(500px, 400px - 80px) = max(500px, 320px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<h2>(Max) max-width <em>incorrectly</em> gives us the Smaller dimension: </h2>
<div class="parent400">
400px parent
<div class="wrong">child is min(500px, 400px - 80px) = min(500px, 320px) = 320px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent500">
500px parent
<div class="wrong">child is min(500px, 500px - 80px) = min(500px, 420px) = 420px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent600">
600px parent
<div class="wrong">child is min(500px, 600px - 80px) = min(500px, 520px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div>20<div class="width80">80px</div></div>
즉, 위의 @andy의 답변 은 추론하기가 더 쉬울 수 있으며 많은 사용 사례에서 더 적절할 수 있습니다.
또한 결국 a max()및 min()함수가 CSS에 도입 될 수 있지만 2019 년 4 월부터는 사양의 일부가 아닙니다.
여기에서 max()브라우저 호환성을 확인할 수 있습니다 :
https://developer.mozilla.org/en-US/docs/Web/CSS/max#Browser_compatibility .
다음은 제안 초안입니다.
https://drafts.csswg.org/css-values-4/#comp-func .
페이지 상단으로 스크롤하여 마지막 수정 날짜를 확인합니다 (오늘 현재, 2019 년 4 월 5 일에 마지막으로 수정되었습니다).
@Amaud 같은 결과를 얻기위한 대안이 있습니까?
비슷한 결과를 얻을 수있는 비 -js 순수 CSS 접근 방식이 있습니다. 부모 요소 컨테이너 패딩 / 여백을 조정해야합니다.
.parent {
padding: 0 50px 0 0;
width: calc(50%-50px);
background-color: #000;
}
.parent .child {
max-width:100%;
height:50px;
background-color: #999;
}
<div class="parent">
<div class="child"></div>
</div>