2017-12-13 2 views
4

CSS 그리드 레이아웃 (이상적으로는 명시적인 열 그리드가있는)을 사용하고 싶습니다. 그리고 x 축을 따라 여분의 공간을 흡수하거나 다른 항목에서 사용되지 않는만큼의 열을 확장하는 유연한 항목을 갖고 싶습니다.CSS 그리드 레이아웃 - 필요한만큼의 열로 항목을 만듭니다.

완벽 솔루션은 항목이 비어있는 모든 열 (flex 속성과 유사 함)에 걸쳐있게 만드는 속성입니다.하지만 CSS 그리드에서는 불가능합니다.

나는 예를 만들기 위해 노력하고 있습니다 :

다음 레이아웃 그리드에 위치하는 여러 요소를 사용합니다. "aside1"영역의 항목이 잘리는 경우 오른쪽에있는 여유 공간을 흡수하는 유연한 헤더를 갖고 싶습니다.

.grid{ 
    display: grid; 
    grid-template-columns: none 1fr 1fr none; 
    grid-template-areas: "header header header aside1" 
         "nav main main aside2" 
         "nav main main aside3" 
         ; 
} 

header { 
grid-area: header; 
} 

main { 
grid-area: main; 
} 

nav { 
grid-area: nav; 
} 

.aside1 { 
grid-area: aside1; 
} 

.aside2 { 
grid-area: aside2; 
} 

.aside3 { 
grid-area: aside3; 
} 
enter image description here

하지만, 오른쪽에있는 모든 항목이 있기 때문에 그것이 레이아웃은 다음과 같이됩니다 열 년대 물론, 한, 헤더가있을 것입니다 :

enter image description here

플렉스 박스 레이아웃에서는 이것을 구현하기 위해 flex : 1 속성을 사용할 수 있습니다.

그리드에서 ... 사용하지 않는 모든 열을 흡수하는 상자 항목이있는 방법이 필요합니다. 어쩌면 그럴 수 없습니다.

내가 재단 유사한 유연한 XY 그리드와 작은 "framwork"를 구축 할 IST 할 노력하고 무엇
.grid{ 
    display: grid; 
    grid-template-columns: none 1fr none; 
} 

header { 
    grid-column: 1/????; 
    grid-row: 1/2; 
} 

main { 
    grid-column: 2/3; 
    grid-row: 1/2; 
} 

nav { 
    grid-column: 2/3; 
    grid-row: 1/2; 
} 

.aside1 { 
    grid-column: 2/3; 
    grid-row: 1/2; 
} 

.aside2 { 
    grid-column: 2/3; 
    grid-row: 2/3; 
} 

.aside3 { 
    grid-column: 2/3; 
    grid-row: 3/4; 
} 

하지만, 음 .. 아니 그 시원 (가 학교 프로젝트이다).

그리고 그것은 모두 그리드 시스템을 구축 할 수 있는지 궁금 해서요 :

  1. 그리드 항목, x 축을 따라 모든 여유 공간/열을 흡수 - 플렉스 그리드와 파운데이션 가능을 . 여러 행에 걸쳐

  2. 그리드 항목 - 플렉스 그리드에 불가능은 다음을 참조하십시오 Is it possible for flex items to align tightly to the items above them? (첫 번째 대답은 꽤 잘 설명)

나는 나 자신이 좀 더 명확하게 바랍니다.

+1

행에 플렉스 항목이 있고 그 중 하나에는 flex : 1 값이 있고 다른 항목에는 고정 폭이 있습니다. flex : 1 항목은 고정 항목 사이의 여유 공간을 모두 차지합니다. 그래서 다른 행이 없을 때 전체 행에 걸쳐 있어야합니다. 주요 아이디어는 측면에있는 항목을 잘라내어 메인 섹션이 사용 가능한 공간을 채우는 유연한 그리드를 만드는 것입니다. 그리고 CSS-Grid-Layout으로 빌드하십시오. 가능한 경우에만 관심이 있습니다. – MioMioMate

답변

0

가능한 해결 방법은 명시 적으로 크기가 지정된 열의 경우 grid-template-columns을 사용하고 추가로 유연한 열의 경우 grid-auto-columns을 사용하는 것입니다. grid-template-columns명시 적 그리드의 열 크기 동안

grid-auto-columns암시 그리드의 열 크기.

그래서처럼 열 크기 조정 시도 :

grid-template-columns: 100px 100px /* sizes the first two columns */ 
grid-auto-columns: 1fr    /* distributes free space among additional columns; if 
             there is only one column, it consumes all space; */ 

이 포스트가 유용 할 수 있습니다

나는 당신이있을 때와 유사한 행동을 기대했다
+1

나는이 질문을 꽤 오랫동안 생각해 왔지만 해결책을 찾을 수없는 것 같습니다. 때로는 행할 수있는 것 같지만 결국에는 항상 문제가 있습니다. – vals

+0

CSS Grid *의 모든 레이아웃 문제가 해결되었다는 일반적인 인상이 있다고 생각합니다. 진실은 * 많은 레이아웃 문제가 해결되었지만 확실히 모든 것이 아닙니다. CSS v1 (1996)은 많이 남았습니다. CSS Grid Level 1 (2017)에 대해서도 마찬가지입니다. 시간을 좀주세요 :-) @vals –

+1

고마워요. 링크의 Answers는 내가하려는 일에 매우 가깝습니다. 100 %가 아닙니다. 그러나 당신이 말했듯이, 가장 가능성이 높습니다 (아직). – MioMioMate