篮羽公爵 發表於 2023-1-29 11:58:00

Bootstrap Modal 在iOS设备(iPhone/iPad)中无法正常弹出显示的问题及解决方法

<p>最近在用Bootstrap modal的时候,遇到了在iOS设备上无法正常显示的问题。</p>
<p>上网查了一下,在 Github 找到一个类似的问题。基本上是因为把 Modal组件放在responsive table中了,所以导致了一些问题。解决方案就是,把modal放在 Html Table tag (and bootstrap "table-responsive" class) 外面。</p>
<blockquote>
<p>this is because the overflow and scrolling in the responsive table creates a new formatting context that breaks some stuff. Same thing happens when putting modals in stickied or fixed position elements. Think this is closable as a won't fix / can't fix right now.</p>
</blockquote>
<br>
在iOS设备中不能正常显示的代码
<details>
<summary>点击查看代码</summary>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"&gt;&lt;/script&gt;
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="mt-3"&gt;
      &lt;div class="table-responsive"&gt;
            &lt;table class="table table-borderless caption-top"&gt;
                &lt;caption&gt;&lt;/caption&gt;
                &lt;thead class="border-bottom border-dark"&gt;
                  &lt;tr&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                  &lt;div&gt;
                        &lt;tr&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr class="border-bottom"&gt;
                            &lt;td&gt;&lt;/td&gt;
                            &lt;td colspan="6"&gt;
                              &lt;button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal"
                                    data-bs-target="#testModal"&gt;
                                    &lt;nobr&gt;btnModal&lt;/nobr&gt;
                              &lt;/button&gt;
                            &lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;div class="modal fade" id="testModal" tabindex="-1" aria-labelledby="editModalLabel"
                            aria-hidden="true"&gt;
                            &lt;div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"&gt;
                              &lt;div class="modal-content"&gt;
                                    &lt;div class="modal-header"&gt;
                                        &lt;h5 class="modal-title" id="exampleModalLabel"&gt;Confirm&lt;/h5&gt;
                                        &lt;button type="button" class="btn-close" data-bs-dismiss="modal"
                                          aria-label="Close"&gt;&lt;/button&gt;
                                    &lt;/div&gt;
                                    &lt;div class="modal-body"&gt;
                                        &lt;label class="form-label"&gt;Are you sure ? &lt;/label&gt;
                                    &lt;/div&gt;
                                    &lt;div class="modal-footer"&gt;
                                        &lt;button type="button" class="btn btn-secondary"
                                          data-bs-dismiss="modal"&gt;Back&lt;/button&gt;
                                        &lt;button type="button" class="btn btn-primary"&gt;OK&lt;/button&gt;
                                    &lt;/div&gt;
                              &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;

                  &lt;/div&gt;

                &lt;/tbody&gt;
            &lt;/table&gt;
      &lt;/div&gt;

    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
</details>
<p>在iOS设备中能够正常显示的代码</p>
<details>
<summary>点击查看代码</summary>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"&gt;&lt;/script&gt;
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="mt-3"&gt;
      &lt;div class="table-responsive"&gt;
            &lt;table class="table table-borderless caption-top"&gt;
                &lt;caption&gt;&lt;/caption&gt;
                &lt;thead class="border-bottom border-dark"&gt;
                  &lt;tr&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                        &lt;th&gt;ha&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                  &lt;div&gt;
                        &lt;tr&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                            &lt;td&gt;a&lt;/td&gt;
                            &lt;td&gt;b&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr class="border-bottom"&gt;
                            &lt;td&gt;&lt;/td&gt;
                            &lt;td colspan="6"&gt;
                              &lt;button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal"
                                    data-bs-target="#testModal"&gt;
                                    &lt;nobr&gt;btnModal&lt;/nobr&gt;
                              &lt;/button&gt;
                            &lt;/td&gt;
                        &lt;/tr&gt;


                  &lt;/div&gt;

                &lt;/tbody&gt;
            &lt;/table&gt;
      &lt;/div&gt;
      &lt;div class="modal fade" id="testModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"&gt;
            &lt;div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"&gt;
                &lt;div class="modal-content"&gt;
                  &lt;div class="modal-header"&gt;
                        &lt;h5 class="modal-title" id="exampleModalLabel"&gt;Confirm&lt;/h5&gt;
                        &lt;button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"&gt;&lt;/button&gt;
                  &lt;/div&gt;
                  &lt;div class="modal-body"&gt;
                        &lt;label class="form-label"&gt;Are you sure ? &lt;/label&gt;
                  &lt;/div&gt;
                  &lt;div class="modal-footer"&gt;
                        &lt;button type="button" class="btn btn-secondary" data-bs-dismiss="modal"&gt;Back&lt;/button&gt;
                        &lt;button type="button" class="btn btn-primary"&gt;OK&lt;/button&gt;
                  &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
</details>
<br>
参考资料:
Bootstrap modal bugged only when open on iphone/ipad #31638 <br>
(https://github.com/twbs/bootstrap/issues/31638 "https://github.com/twbs/bootstrap/issues/31638")<br><br>
来源:https://www.cnblogs.com/passacaglia/p/17072308.html
頁: [1]
查看完整版本: Bootstrap Modal 在iOS设备(iPhone/iPad)中无法正常弹出显示的问题及解决方法