플렉스 아이템이 텍스트로 인해 넘치지 않게하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
목록을 위해 다음 레이아웃을 염두에두고 있습니다. 각 목록 항목은 두 개의 열로 표시됩니다. 두 번째 열은 사용 가능한 모든 공간을 차지해야하지만 첫 번째 열이 너무 많은 공간을 차지하는 경우 최소 크기로 오른쪽에 고정되어야합니다. 그러면 첫 번째 열에 줄임표가 표시됩니다.
마지막 경우에 문제가 발생합니다. 첫 번째 열이 줄임표를 표시하는 대신 너무 많은 텍스트로 구성되어 있으면 가변 상자 밖으로 확장되어 가로 스크롤 막대가 나타나고 두 번째 열은 오른쪽에 고정되지 않습니다.
다음과 같이 렌더링하고 싶습니다 (목업).
어떻게 할 수 있습니까?
이것은 샘플 바이올린 입니다.
.container {
display: -webkit-flex;
}
div {
white-space: nowrap;
text-overflow: ellipsis;
}
.container > div:last-child {
-webkit-flex: 1;
background: red;
}
<!-- a small first column; the second column is taking up space as expected -->
<div class="container">
<div>foo barfoo bar</div>
<div>foo bar</div>
</div>
<!-- a large first column; the first column is overflowing out of the flexbox container -->
<div class="container">
<div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>
<div>foo bar</div>
</div>
최신 정보
작동하는 코드 추가 :
.container {
display: -webkit-flex;
}
.container>div:first-child{
white-space:nowrap;
-webkit-order:1;
-webkit-flex: 0 1 auto; /*important*/
text-overflow: ellipsis;
overflow:hidden;
min-width:0; /* new algorithm overrides the width calculation */
}
.container > div:last-child {
-webkit-flex: 1;
-webkit-order:2;
background: red;
-webkit-flex:1 0 auto; /*important*/
}
.container > div:first-child:hover{
white-space:normal;
}
<div class="container">
<div>foo barfoo bar</div>
<div>foo bar</div>
</div>
<div class="container">
<div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>
<div>foo bar</div>
</div>
<div class="container">
<div>foo barfoo bar</div>
<div>foo bar</div>
</div>
<div class="container">
<div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>
<div>foo bar</div>
</div><div class="container">
<div>foo barfoo bar</div>
<div>foo bar</div>
</div>
원래 답변 / 설명.
W3C 사양은 " 기본적으로 플렉스 항목은 최소 콘텐츠 크기 (가장 긴 단어 또는 고정 크기 요소의 길이) 이하로 축소되지 않습니다.이를 변경하려면 '최소 너비'또는 '최소 높이'를 설정합니다. 재산. "
이 추론을 따르면 버그가 Canary에서 제거되었다고 생각합니다.
최대한 빨리 넣어 확인 min-width
에 0
, 그것은 카나리아에서 작동합니다.
따라서 버그는 이전 구현에 있었고 카나리아는 해당 버그를 제거합니다.
이 예제는 카나리아에서 작동합니다. http://jsfiddle.net/iamanubhavsaini/zWtBu/
Google Chrome 버전 23.0.1245.0 카나리아를 사용했습니다.
다음과 같이 flex
속성 의 세 번째 값 을 auto 로 설정하여 자식의 기본 크기를 설정할 수 있습니다 .
flex: 1 0 auto;
이것은 flex-basis
속성 을 설정하는 약어입니다 .
( 예 )
그러나 댓글에서 언급했듯이 Chrome Canary에서는 작동하지 않는 것 같습니다. 이유는 모르겠습니다.
업데이트 : 이것은 답이 아닙니다. 다른 문제를 해결하고 실제 답을 찾는 단계였습니다. 그래서 나는 역사적인 이유로 그것을 유지하고 있습니다. 그것에 투표하지 마십시오.
나는 이것이 당신의 대답이라고 믿습니다 : http://jsfiddle.net/iamanubhavsaini/zWtBu/2/
W3C 참조
첫 번째 요소
-webkit-flex: 0 1 auto; /* important to note */
두 번째 요소의 경우
-webkit-flex:1 0 auto; /* important to note */
트릭을 수행하는 속성과 값입니다.
http://www.w3.org/TR/2012/WD-css3-flexbox-20120612/#flex 에서 자세히 알아보기
그리고 이것은 순서를 반대로하는 방법입니다 : http://jsfiddle.net/iamanubhavsaini/zWtBu/3/
그리고 이것은 red-backgrounded-thingy의 미리 정의 된 최소 너비를 가진 것입니다 : http://jsfiddle.net/iamanubhavsaini/zWtBu/1/
mozilla의 경우 "min-width : 1px;"를 추가해야합니다.
이 예제는 정말 도움이되었습니다 : http://jsfiddle.net/laukstein/LLNsV/
container {
display: -webkit-flex;
-webkit-flex-direction: row;
padding: 0;
white-space: nowrap;
}
.container>div {
overflow: hidden;
display: inline-block;
-webkit-flex: 1;
min-width: 0;
text-overflow: ellipsis;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
업데이트 : 이것은 답이 아닙니다. 다른 문제를 해결하고 실제 답을 찾는 단계였습니다. 그래서 나는 역사적인 이유로 그것을 유지하고 있습니다. 그것에 투표하지 마십시오.
편집 2 :이 대답은 문제를 해결하지 않습니다. 질문의 대상과 답변 사이에는 미묘한 차이가 있습니다.
우선, text-overflow:ellipsis
함께 작동합니다 overflow:hidden
. 실제로 overflow:visible
. Ref
그런 다음 다음을 반복합니다.
http://jsfiddle.net/iamanubhavsaini/QCLjt/8/
Here, I have put overflow
and max-width
properties. max-width:60%;
and overflow:hidden
is what makes things appear as you intended, as hidden
stops the text from displaying and 60%
actually creates the box of definite size in case of too much text data.
Then, if you are really interested in flex box model here's how things pan out via -webkit-order
.
http://jsfiddle.net/iamanubhavsaini/QCLjt/9/
--code--
<div class="container">
<div>foo barfoo bar</div>
<div>foo bar</div>
</div>
<div class="container">
<div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar
foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>
<div>foo bar</div>
</div>
concerned CSS
.container {
display: -webkit-flex;
}
div {
white-space: nowrap;
text-overflow: ellipsis;
overflow:hidden;
}
.container>div:first-child{
-webkit-order:1;
-webkit-flex: 1;
}
.container > div:last-child {
-webkit-flex: 1;
-webkit-order:2;
background: red;
}
-- There is no width and still it works. And this is what I see.
--after comment
-webkit-order:N; is the what we will be using after 2+ years instead of float:---;
and many more hacks(if W3C stays on this course and also if every browser vendor follow)
here, order is 1 for the left div and 2 for the right div. thus, they are Left-Right.
http://jsfiddle.net/iamanubhavsaini/QCLjt/10/
same thing here, but only if you are looking for Right-Left, just change the order of the things as div>first-child { -webkit-order:2; } div>last-child{-webkit-order:1;}
NOTE: this -webkit-flex
way of doing things obviously renders this code useless on other engines. For, reuse of code, on multiple browser engines float
ing should be used.
below are some JS examples; that doesn't answer the question -after comment
나는 이것이 당신의 질문에 답하고 앞으로 더 많은 것을 생각합니다. 다른 방법과 다른 해결책이 있지만이 질문에 대한 정확한 해결책은 아닙니다. http://jsfiddle.net/iamanubhavsaini/vtaY8/1/ http://jsfiddle.net/iamanubhavsaini/9z3Qr/3/ http://jsfiddle.net/iamanubhavsaini/33v8g/4/ http://jsfiddle.net/ iamanubhavsaini / 33v8g / 1 /
컨테이너 위치 : 상대 위치 및 하위 위치 : 절대 위치를 만들어야합니다.
'Programing' 카테고리의 다른 글
언제 stdClass를 사용해야하고 언제 PHP oo 코드에서 배열을 사용해야합니까? (0) | 2020.11.08 |
---|---|
Xcode : 헤더 복사 : 공개 vs. 비공개 vs. 프로젝트? (0) | 2020.11.08 |
이미지를 BufferedImage로 변환하는 Java (0) | 2020.11.08 |
텍스트를 왼쪽으로 90도 회전하는 방법 및 셀 크기는 html의 텍스트에 따라 조정됩니다. (0) | 2020.11.08 |
JWT와 Bearer Token의 차이점은 무엇입니까? (0) | 2020.11.08 |