el-dialog弹框中img图片保持比例最大化;图片保持比例最大化

本文介绍了一种使用 Element UI 的对话框组件来展示图片的方法,并通过 CSS 样式确保图片能够在保持原有宽高比的情况下最大化显示。这种方法适用于需要查看大尺寸图片的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片保持比例最大化
在这里插入图片描述

    <el-dialog :visible.sync="dialogVisible" center class="look_img_dia">
      <img width="100%" :src="dialogImageUrl" alt="" />
    </el-dialog>


  .look_img_dia {
    /deep/.el-dialog {
      margin-top: 5vh !important;
      width: -webkit-calc(~'80vw') !important;
      width: -moz-calc(~'80vw') !important;
      width: calc(~'80vw') !important;
      height: -webkit-calc(~'90vh') !important;
      height: -moz-calc(~'90vh') !important;
      height: calc(~'90vh') !important;
      .el-dialog__body {
        box-sizing: border-box;
        padding: 10px;
        width: -webkit-calc(~'80vw') !important;
        width: -moz-calc(~'80vw') !important;
        width: calc(~'80vw') !important;
        height: -webkit-calc(~'90vh - 100px') !important;
        height: -moz-calc(~'90vh - 100px') !important;
        height: calc(~'90vh - 100px') !important;
        img {
          width: 100% !important;
          height: 100% !important;
          object-fit: scale-down !important;
        }
      }
    }
  }

<style scoped> /* 基础响应式 */ .filter-container { padding: 10px; } /* 移动端表单项优化 */ @media (max-width: 768px) { .el-form-item { margin-bottom: 15px; } .el-form-item__label { float: none; display: block; text-align: left; padding: 0 0 8px 0; } .el-form-item__content { margin-left: 0 !important; } .mobile-full-width { width: 100%; } /* 解决iOS Safari渲染问题 */ :deep(.el-select) { width: 100%; } } /* 对话移动端适配 */ :deep(.el-dialog) { @media (max-width: 768px) { width: 90% !important; margin-top: 5vh !important; } } </style> <template> <div class="filter-container"> <el-form :model="searchForm"> <el-row :gutter="15"> <!-- 问卷标题搜索 --> <el-col :xs="24" :sm="12" :md="6"> <el-form-item label="问卷标题"> <el-input v-model="searchForm.dcWjTitle" placeholder="输入问卷标题" clearable /> </el-form-item> </el-col> <!-- 被测评人ID搜索 --> <el-col :xs="24" :sm="12" :md="6"> <el-form-item label="被测评人ID"> <el-input v-model="searchForm.dcid" placeholder="输入被测评人ID" clearable /> </el-form-item> </el-col> <!-- 部门选择 --> <el-col :xs="24" :sm="12" :md="6"> <el-form-item label="人员部门"> <el-select v-model="searchForm.dcDept" placeholder="选择部门" clearable > ... </el-select> </el-form-item> </el-col> <!-- 状态选择 --> <el-col :xs="24" :sm="12" :md="6"> <el-form-item label="提交状态"> <el-select v-model="searchForm.state" placeholder="选择状态" clearable > ... </el-select> </el-form-item> </el-col> <!-- 搜索按钮 --> <el-col :xs="24" :sm="24" :md="6"> <el-form-item> <el-button type="primary" @click="handleSearch" icon="el-icon-search" class="mobile-full-width" >搜索</el-button> </el-form-item> </el-col> </el-row> </el-form> </div> </template> <script> export default { data() { return { searchForm: { dcWjTitle: '', dcid: '', dcDept: '', state: '' }, rawData: [], // 原始数据 departments: [ // 部门选项 { label: '技术部', value: 'tech' }, { label: '市场部', value: 'market' } ] } }, computed: { // 过滤后的数据 filteredData() { return this.rawData.filter(item => (!this.searchForm.dcWjTitle || item.title.includes(this.searchForm.dcWjTitle)) && (!this.searchForm.dcid || item.dcid === this.searchForm.dcid) && (!this.searchForm.dcDept || item.dept === this.searchForm.dcDept) && (!this.searchForm.state || item.state === this.searchForm.state) ) } }, methods: { // 触发搜索 handleSearch() { this.fetchFilteredData() }, // 从后端获取数据 async fetchFilteredData() { try { const params = { title: this.searchForm.dcWjTitle, dcid: this.searchForm.dcid, dept: this.searchForm.dcDept, state: this.searchForm.state } // 调用后端API(示例) const { data } = await axios.get('http://172.26.26.43/dev-api/wjdc/wj/listTx?', { params }) this.rawData = data } catch (error) { console.error('获取数据失败', error) } } } } </script> 为什么这个布局我再电脑网页上打开显示不全
最新发布
07-15
<template> <div> <el-dialog title="OTA批量升级" :visible.sync="dialogVisible" width="600px" custom-class="ota-dialog" :close-on-click-modal="false" > <div class="dialog-content"> <!-- 操作区域 --> <div class="action-section"> <div class="upload-section"> <el-upload action="/api/upload" :on-success="handleUploadSuccess" :before-upload="beforeUpload" :limit="1" :on-exceed="handleExceed" :file-list="fileList" :class="{ 'has-file': fileList.length }" drag > <i class="el-icon-upload"></i> <div class="el-upload__text"> <div>点击或拖拽文件到此处上传</div> <div class="el-upload__tip">支持.xlsx、.xls格式文件</div> </div> </el-upload> <!-- 文件信息卡片 --> <div v-if="fileList.length" class="file-card"> <div class="file-info"> <i class="el-icon-document"></i> <div class="file-details"> <div class="file-name">{{ fileList[0].name }}</div> <div class="file-size">{{ formatFileSize(fileList[0].size) }}</div> </div> </div> <el-button type="danger" icon="el-icon-delete" circle @click="fileList = []" ></el-button> </div> </div> </div> </div> <!-- 底部按钮 --> <div slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="otaBatchUpgradeCinfirm()" :disabled="!fileList.length" > 确定 </el-button> </div> </el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false, fileList: [] }; }, methods: { init() { this.dialogVisible = true; this.fileList = []; }, otaBatchUpgradeCinfirm() { // 升级逻辑 }, handleUploadSuccess(response, file, fileList) { this.$ message.success('文件上传成功'); this.fileList = fileList; }, beforeUpload(file) { const isValidType = [ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel' ].includes(file.type); if (!isValidType) { this.$ message.error('请上传Excel格式的文件 (.xlsx 或 .xls)'); } return isValidType; }, handleExceed() { this.$ message.warning('每次只能上传一个文件'); }, formatFileSize(size) { if (size < 1024) return size + ' B'; if (size < 1024 * 1024) return (size / 1024).toFixed(1) + ' KB'; return (size / (1024 * 1024)).toFixed(1) + ' MB'; } } }; </script> <style scoped> /* 操作区域 */ .action-section { display: flex; flex-direction: column; gap: 20px; } .upload-section { position: relative; display: flex; justify-content: center; } /* 文件卡片 */ .file-card { margin-top: 15px; padding: 15px; border-radius: 8px; background-color: #f5f7fa; display: flex; align-items: center; justify-content: space-between; border: 1px solid #ebeef5; } .file-info { display: flex; align-items: center; gap: 12px; } .file-info i { font-size: 28px; color: #409EFF; } .file-details { line-height: 1.5; } .file-name { font-weight: 500; max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-size { font-size: 12px; color: #909399; } /* 底部按钮 */ .dialog-footer { display: flex; justify-content: flex-end; padding-top: 15px; border-top: 1px solid #ebeef5; } /* 上传区域激活状态 */ .has-file >>> .el-upload-dragger { border: 1px dashed #67C23A; background-color: rgba(103, 194, 58, 0.05); } </style> 添加上传文件列表和文件预览功能,要保证美观和交互完美,不加其他新的功能
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值