简体   繁体   English

是否可以有一个具有固定高度但可变宽度的元素的列流网格?

[英]Is it possible to have a column-flow grid of elements with fixed height, but variable width?

I'm working on a website at the moment where I have a horizontally aligned, scrollable grid of cards.我目前正在一个网站上工作,我有一个水平对齐的、可滚动的卡片网格。 Here is a code:这是一个代码:

 .testimonial-card { min-width: 350px; height: 280px; flex-basis: auto; }
 <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet"/> <div class="overflow-y-scroll gap-10 pb-4 flex flex-row justify-start"> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 overflow-x-scroll testimonial-card"> <div class="grid grid-flow-row justify-center items-stretch h-full gap-4"> <div> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> </div>

Each card contains text, which in production will be of variable length.每张卡片都包含文本,这些文本在生产中的长度是可变的。

I'd like the cards to have a set height of 280px, and a min-width of 350px, with the ability to expand horizontally if the text fills the space available in the card.我希望卡片的设置高度为 280 像素,最小宽度为 350 像素,如果文本填满卡片中的可用空间,则能够水平扩展。

Is that possible?那可能吗? I've tried a few different approaches now but am getting nowhere.我现在尝试了几种不同的方法,但无济于事。 Currently using grid but happy to use flexbox if it can be done with that.目前使用网格,但如果可以的话,很乐意使用 flexbox。

By default things grow vertically in html because block flow direction is top-to-bottom.默认情况下,事物在 html 中垂直增长,因为 块流方向是自上而下的。 We can change the behavior using writing-mode: vertical-lr;我们可以使用writing-mode: vertical-lr; , but the displayed text will be vertical lines. ,但显示的文本将是垂直线。
If we create similar text div and make it flow vertically then parent div will grow to optimum width and our main text won't have scroll bars with that width.如果我们创建类似的文本 div 并使其垂直流动,那么父 div 将增长到最佳宽度,并且我们的主文本不会有该宽度的滚动条。
Here is my weird solution:这是我奇怪的解决方案:

 .testimonial-card { height: 280px; flex-basis: auto; }.card-content { min-width: 350px; /*shifed min-width here*/ height: 7em; position: relative; } /* using this to stretch parent enough to not have scroll */.helper { visibility: hidden; background-color: thistle; writing-mode: vertical-lr; overflow-wrap: break-word; line-height: 1.3rem; height: 7rem; /*limiting to 5 lines*/ }.message { /*background-color: wheat;*/ border: 1px solid green; width: 100%; position: absolute; top: 0px; line-height: 1.3rem; height: 8rem; }
 <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet" /> <div class="overflow-y-scroll gap-10 pb-4 flex flex-row justify-start"> <div class="text-white bg-black border-white border rounded-xl p-8 testimonial-card"> <div class="card-content grid grid-flow-row items-stretch h-full gap-4"> <div class="helper"> 1 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam evenietamet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet. </div> <div class="message"> 1 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam evenietamet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet. </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 testimonial-card"> <div class="card-content grid grid-flow-row items-stretch h-full gap-4"> <div class="helper"> 2 Lorem ipsum dolor sit, amet </div> <div class="message"> 2 Lorem ipsum dolor sit, amet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 testimonial-card"> <div class="card-content grid grid-flow-row items-stretch h-full gap-4"> <div class="helper"> 3 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet 3 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="message"> 3 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet 3 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ipsam, sed quos laudantium modi dolorem id eum voluptatum veniam eveniet </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 testimonial-card"> <div class="card-content grid grid-flow-row items-stretch h-full gap-4"> <div class="helper"> 4 Hi. </div> <div class="message"> 4 Hi, </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> <div class="text-white bg-black border-white border rounded-xl p-8 testimonial-card"> <div class="card-content grid grid-flow-row items-stretch h-full gap-4"> <div class="helper"> 5. Lorem ipsum dolor sit. amet consectetur adipisicing elit, </div> <div class="message"> 5. Lorem ipsum dolor sit, amet consectetur adipisicing elit. </div> <div class="grid grid-flow-col items-center justify-start gap-4"> <div class="bg-gray-200 h-12 w-12 rounded-full"></div> <div class="grid grid-flow-row items-center"> <div>David</div> <div>United Kingdom</div> </div> </div> </div> </div> </div>

The downside is that you'll have to keep one more hidden copy of message on the page.缺点是您必须在页面上再保留一份隐藏的消息副本。

If you use javascript uou can do calculations and directly set width on 'card-content' elements.如果您使用 javascript,您可以进行计算并直接在“卡片内容”元素上设置宽度。 Here is a discussion about how to calculate text width Calculate text width with JavaScript .这是关于如何计算文本宽度的讨论使用 JavaScript 计算文本宽度 Once you get the value you divide it by number of rows to get width to set.获得值后,将其除以行数以设置宽度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM