Bootstrap4 模态框组件

模态框的作用

模态框(Modal)是一个覆盖在父页面上的子窗口,用于显示内容、收集用户输入或确认操作。Bootstrap 4的模态框组件提供了响应式设计、动画效果和丰富的自定义选项。

基础模态框

创建一个基本的模态框,包含标题、内容和操作按钮。

基础模态框示例
HTML 代码:
<!-- 触发按钮 -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#basicModal">
  打开基础模态框
</button>

<!-- 模态框 -->
<div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="basicModalLabel">模态框标题</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="关闭">
          <span aria-hidden="true">×</span>
        </button>
      </div>
      <div class="modal-body">
        这是模态框的内容区域。
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
        <button type="button" class="btn btn-primary">保存更改</button>
      </div>
    </div>
  </div>
</div>

不同尺寸的模态框

Bootstrap 4 提供了多种尺寸的模态框,包括小、默认、大和全屏尺寸。

模态框尺寸示例
HTML 代码:
<!-- 小模态框 -->
<div class="modal fade" id="smallModal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-sm" role="document">
    <!-- 模态框内容 -->
  </div>
</div>

<!-- 大模态框 -->
<div class="modal fade" id="largeModal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-lg" role="document">
    <!-- 模态框内容 -->
  </div>
</div>

<!-- 全屏模态框 -->
<div class="modal fade" id="fullscreenModal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-fullscreen" role="document">
    <!-- 模态框内容 -->
  </div>
</div>
CSS 代码(全屏模态框):
.modal-fullscreen .modal-dialog {
  max-width: 100%;
  margin: 0;
}

.modal-fullscreen .modal-content {
  height: 100vh;
  border: 0;
  border-radius: 0;
}

表单模态框

在模态框中嵌入表单,用于收集用户输入。

表单模态框示例
HTML 代码:
<div class="modal fade" id="formModal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">用户注册</h5>
        <button type="button" class="close" data-dismiss="modal">
          <span>×</span>
        </button>
      </div>
      <div class="modal-body">
        <form>
          <div class="form-group">
            <label for="username">用户名</label>
            <input type="text" class="form-control" id="username" placeholder="请输入用户名">
          </div>
          <div class="form-group">
            <label for="email">邮箱地址</label>
            <input type="email" class="form-control" id="email" placeholder="请输入邮箱">
          </div>
          <div class="form-group">
            <label for="password">密码</label>
            <input type="password" class="form-control" id="password" placeholder="请输入密码">
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
        <button type="button" class="btn btn-primary">注册</button>
      </div>
    </div>
  </div>
</div>

垂直居中模态框

将模态框在屏幕中垂直居中显示。

垂直居中模态框示例
HTML 代码:
<div class="modal fade modal-centered" id="centeredModal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <!-- 模态框内容 -->
  </div>
</div>
CSS 代码(自定义居中):
.modal-centered .modal-dialog {
  display: flex;
  align-items: center;
  min-height: calc(100% - 1rem);
}

滚动长内容模态框

当模态框内容过长时,启用滚动功能。

滚动长内容模态框示例
HTML 代码:
<div class="modal fade modal-scrollable" id="scrollableModal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">长内容模态框</h5>
        <button type="button" class="close" data-dismiss="modal">
          <span>×</span>
        </button>
      </div>
      <div class="modal-body">
        <!-- 长内容 -->
      </div>
    </div>
  </div>
</div>
CSS 代码:
.modal-scrollable .modal-body {
  max-height: 70vh;
  overflow-y: auto;
}

静态背景模态框

创建静态背景模态框,点击模态框外部不会关闭模态框。

静态背景模态框示例
HTML 代码:
<div class="modal fade" id="staticModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">静态背景模态框</h5>
        <button type="button" class="close" data-dismiss="modal">
          <span>×</span>
        </button>
      </div>
      <div class="modal-body">
        这个模态框有静态背景,点击模态框外部或按ESC键不会关闭它。
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" data-dismiss="modal">确定</button>
      </div>
    </div>
  </div>
</div>

自定义样式模态框

通过自定义CSS创建独特的模态框样式。

自定义样式模态框示例
HTML 代码:
<div class="modal fade modal-custom" id="customModal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title"><i class="fas fa-star"></i> 自定义标题</h5>
        <button type="button" class="close" data-dismiss="modal">
          <span>×</span>
        </button>
      </div>
      <div class="modal-body">
        这是自定义样式的模态框。
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">取消</button>
        <button type="button" class="btn btn-primary">确认</button>
      </div>
    </div>
  </div>
</div>
CSS 代码:
.modal-custom .modal-header {
  background-color: #6f42c1;
  color: white;
}

.modal-custom .modal-footer {
  background-color: #f8f9fa;
}

JavaScript API

Bootstrap 4模态框组件提供了丰富的JavaScript API,允许您通过代码控制模态框行为。

JavaScript API 示例
JavaScript 代码:
// 获取模态框实例
var myModal = $('#apiModal');

// 显示模态框
$('#showModal').click(function() {
  myModal.modal('show');
});

// 隐藏模态框
$('#hideModal').click(function() {
  myModal.modal('hide');
});

// 切换模态框
$('#toggleModal').click(function() {
  myModal.modal('toggle');
});

// 事件监听
myModal.on('show.bs.modal', function() {
  console.log('模态框即将显示');
});

myModal.on('shown.bs.modal', function() {
  console.log('模态框已完全显示');
});

myModal.on('hide.bs.modal', function() {
  console.log('模态框即将隐藏');
});

myModal.on('hidden.bs.modal', function() {
  console.log('模态框已完全隐藏');
});

最佳实践

使用模态框组件时,遵循以下最佳实践可以提升用户体验和可访问性。

模态框最佳实践
  • 保持简洁 - 模态框内容应该简洁明了,避免过多信息
  • 提供明确的关闭方式 - 确保用户可以通过多种方式关闭模态框
  • 考虑可访问性 - 使用适当的ARIA标签和键盘导航支持
  • 响应式设计 - 确保模态框在不同设备上都能良好显示
  • 适当的动画 - 使用适度的动画效果增强用户体验
  • 避免过度使用 - 只在必要时使用模态框,避免干扰用户

学习完成!

恭喜!您已经掌握了Bootstrap 4模态框组件的使用方法。模态框是创建对话框和弹出窗口的重要组件,合理使用可以大大提升用户交互体验。

继续学习下一章:Bootstrap 4 工具类