您好,登錄后才能下訂單哦!
小編給大家分享一下angular中的瀏覽器兼容性問題怎么解決,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
問題:edge瀏覽器下,固定列的邊框消失
原因:ng-zorro-antd表格組件使用nzLeft和nzRight指令固定的表格列,這兩個指令的實現css3中的標簽:
position: -webkit-sticky !important; position: sticky !important;
谷歌、火狐及-webkit-內核的瀏覽器均支持該屬性(css3),IE不支持該屬性,所以在IE中,會自動降級,表格無固定列,可滑動的形式。
Edge瀏覽器在1703之后的版本使用了chromium內核,對css3的屬性支持較好,也支持sticky屬性,可以使用,可以固定表格列,但邊框會消失。
解決方案:
目前可行的解決方案有如下幾種:
針對Edge瀏覽器降級處理,與IE瀏覽器效果一致,無固定列,整體可橫向滾動。
position: absolute;
這種方式來實現表格的固定列。第二個方案的詳細過程如下:
使用p包裹表格,當表格寬度超過p寬度時,開啟滾動:
.scroll-table { width: 100%; overflow-x: scroll; }
針對表格,我們可以指定寬度,讓其超過外層p寬度(這樣可以看到滾動效果)。
.fixed-table { width: 1300px; /* 可由th,td動態擴充,也可指定寬度 */ border-collapse: collapse; }
最后一個最核心的問題,就是固定列的實現了,非常簡單,將表格的一列設置成絕對定位,在設置了絕對定位后,該列會脫離原來的文檔流,表格少了一列,所以需要加一個背景板來保證表格能夠給這個固定列留出一個位置。
HTML代碼大致如下,這個fixed-col可以為固定列的樣式,也可以設置成背景板的樣式,demo中是用其指定了固定列的樣式。
<p class="scroll-table"> <table class="fixed-table"> <thead> <tr> <th>無效背景板</th> <th class="fixed-col">固定列</th> </tr> </thead> <tbody> <tr> <td>無效背景板</td> <td class="fixed-col">固定列</td> </tr> </tbody> </table> </p>
參考代碼:Ironape
問題:Edge瀏覽器的日歷(nz-range-picker)確認按鈕需要點兩次
原因:尚未明確
解決方案:
<nz-range-picker [nzRenderExtraFooter]="renderExtraFooterTpl"> <ng-template #renderExtraFooterTpl> <p> <button nz-button nzType="primary" class="ant-calendar-ok-btn abs-right">確 定</button> </p> </ng-template>
對應css:
.abs-right { position: absolute; right: 12px; top: 7px; z-index: 1; box-shadow: none; }
刪除默認頁腳,完全自定義實現頁腳。此時需要刪除原來的頁腳,可通過:
::ng-deep .ant-calendar-footer-btn { display: none; }
這種方式刪除默認頁腳,此時額外的頁腳不可使用絕對定位。
問題:IE瀏覽器下,在多個tab頁中切換,echart所在容器高度坍塌
原因:IE瀏覽器下父元素不能動態調整高度(即通過子元素動態改變調整高度)
解決方案:固定echart圖表所在的容器高度
問題:IE瀏覽器下,初始化表單時,觸發表單驗證
原因:這個是IE的問題,IE10+實現了input事件,但是觸發的時機卻是錯誤的。比如在placeholder改變時,placeholder的文字不是英語的時候就會觸發,Edge15+修復了這個問題,但是IE可能永遠都不會修復這個問題。
解決方案:
@NgModule({ providers: [{ provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: UniqueInputEventPlugin, deps: [UNIQUE_INPUT_EVENT_PLUGIN_CONFIG], }] }) class MyModule {}
需要注意的是,插件需要自己添加到項目文件中(根據angular團隊所說,這個插件修復了一個IE10或者IE11的bug,但是提交了太多的代碼,這會給增加現有的應用的打包體積,雖然后面關于這個PR討論了挺久,但是看樣子是準備把這個放到FAQ里面,而不會把他并入框架),并在對應的模塊中引用。
另注:IE的輸入框會因為placeholder為中文而觸發表單驗證,placeholder改變了也會觸發表單驗證,所以,有一個討巧的方法,placeholder里面的內容寫成英文形式(推薦),但這顯然不符合中文產品的需求,而且這顯然沒有國際化。所以可以想辦法繞過這一條,使用 HTML實體(已驗證,可行),Unicode編碼(不可以)
看完了這篇文章,相信你對angular中的瀏覽器兼容性問題怎么解決有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。