Skip to content

实现 Flexbox/Grid 生成器 工具

分类:developer | 标签:Flex、Grid、布局、CSS 可视化选择 Flex/Grid 布局属性,实时预览并生成 CSS

2.1 功能说明

可视化选择 Flex/Grid 布局属性,实时预览并生成 CSS

2.1.1 使用指南

使用指导

可视化选择布局属性,实时预览并生成 CSS。Flex 适合一维排列,Grid 适合二维网格。

2.2 代码实现

2.2.1 组件结构

本工具是一个基于 Vue 3 <script setup> 语法的单文件组件(SFC),统一包裹在 ToolPageShell 组件内,由它提供页面标题、工具 ID、分类与「使用指南」插槽等通用外壳;核心业务逻辑(响应式状态、计算属性、事件处理函数)全部写在 <script setup> 中,输入/输出通过 el-inputel-button 等 Element Plus 组件与用户交互,所有数据均在浏览器本地处理,不会上传服务器。

2.2.2 核心逻辑概览

<script setup> 中定义的主要函数/方法:

  • gen()
  • copy()

2.2.3 关键实现代码

以下是该工具的完整 <script setup> 实现(核心代码)。模板(<template>)与样式(<style>)已省略。

vue
import { ref, computed } from 'vue'
import { ElMessage } from 'element-plus'
import ToolPageShell from '@/components/ToolPageShell.vue'

const tab = ref('flex')
const f = ref({ direction: 'row', justify: 'flex-start', align: 'stretch', wrap: 'nowrap', gap: 10, count: 5 })
const g = ref({ cols: 3, rows: 2, gap: 10, colMode: '1fr', count: 6 })

const flexStyle = computed(() => ({
  display: 'flex',
  flexDirection: f.value.direction,
  justifyContent: f.value.justify,
  alignItems: f.value.align,
  flexWrap: f.value.wrap,
  gap: f.value.gap + 'px'
}))
const flexCss = computed(() => `.container {\n  display: flex;\n  flex-direction: ${f.value.direction};\n  justify-content: ${f.value.justify};\n  align-items: ${f.value.align};\n  flex-wrap: ${f.value.wrap};\n  gap: ${f.value.gap}px;\n}`)

const gridStyle = computed(() => ({
  display: 'grid',
  gridTemplateColumns: `repeat(${g.value.cols}, ${g.value.colMode})`,
  gridTemplateRows: `repeat(${g.value.rows}, auto)`,
  gap: g.value.gap + 'px'
}))
const gridCss = computed(() => `.container {\n  display: grid;\n  grid-template-columns: repeat(${g.value.cols}, ${g.value.colMode});\n  grid-template-rows: repeat(${g.value.rows}, auto);\n  gap: ${g.value.gap}px;\n}`)

function gen() {}
function copy(v) { navigator.clipboard?.writeText(v).then(() => ElMessage.success('已复制 CSS')) }

2.3 效果截图

Flexbox/Grid 生成器 效果截图

工具访问地址:https://www.i91tools.com/tools/flex-grid-generator