求助:React实现类似Google Keep的内容尺寸适配网格布局
React实现Google Keep风格卡片网格布局方案
核心CSS布局实现
Google Keep的卡片网格核心特点是自适应列数,卡片宽度有最小限制,自动填充整行,高度随内容动态变化。用CSS Grid就能快速实现:
.keep-grid { display: grid; /* 最小宽度240px,空间足够时自动拉伸,auto-fill自动适配列数 */ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); /* 行列间距 */ gap: 16px; padding: 20px; max-width: 1200px; margin: 0 auto; } .keep-card { background: #fff; border-radius: 8px; box-shadow: 0 1px 2px rgba(0,0,0,0.15); padding: 16px; /* 最小高度保证卡片不会太窄,高度随内容自动扩展 */ min-height: 100px; transition: box-shadow 0.2s ease; } .keep-card:hover { box-shadow: 0 3px 6px rgba(0,0,0,0.2); } .keep-card-title { font-weight: 500; margin-bottom: 8px; font-size: 1rem; } .keep-card-content { color: #5f6368; font-size: 0.9rem; line-height: 1.4; }
React组件示例
结合React封装卡片列表组件,直接复用上面的样式:
import React from 'react'; import './KeepGrid.css'; // 引入编写好的CSS文件 const KeepCards = ({ notes }) => { return ( <div className="keep-grid"> {notes.map(note => ( <div key={note.id} className="keep-card"> <div className="keep-card-title">{note.title}</div> <div className="keep-card-content">{note.content}</div> </div> ))} </div> ); }; // 组件使用示例 const App = () => { // 模拟笔记数据 const sampleNotes = [ { id: 1, title: '购物清单', content: '牛奶、面包、鸡蛋、苹果' }, { id: 2, title: '会议要点', content: '1. 项目进度汇报\n2. 下周任务分配\n3. 需求变更讨论' }, { id: 3, title: '学习笔记', content: 'React Hooks核心:useState、useEffect、useContext' }, { id: 4, title: 'TODO', content: '完成组件封装\n提交PR\n测试响应式布局' }, ]; return <KeepCards notes={sampleNotes} />; }; export default App;
额外优化建议
- 移动端适配:通过媒体查询调整小屏设备的列宽和间距:
@media (max-width: 600px) { .keep-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); padding: 12px; gap: 12px; } }
- 可编辑功能:如果需要双击编辑卡片,可给内容区域添加
contenteditable属性,或用React状态切换输入框显示。 - 拖拽排序:要实现卡片拖拽重排,可集成
react-beautiful-dnd库快速实现。
内容的提问来源于stack exchange,提问作者Sanidhya Sahu
相关产品推荐
相关产品推荐

