Appearance
实现 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-input、el-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 效果截图
