整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端開發之CSS實現在網頁正中間顯示的彈出層

          前端開發之CSS實現在網頁正中間顯示的彈出層

          直以來,讓前端工程師頭疼的問題肯定包括垂直居中這個問題吧,什么文字垂直居中,圖片垂直居中之類的,很頭疼對不對,如果現在讓你寫一個在網頁正中間顯示的彈出層,你會用什么方法寫呢?

          今天來分享一下小編所知道的幾種方法,希望能對大家有用,如果你有更好的解決方法,也歡迎你來告訴我,讓小編也漲漲姿勢哈。

          第一種:固定寬高的彈出層

          運行效果

          css樣式

          html代碼

          這里大家看下我用紅色框框框起來的那幾行代碼哈,其它的只是附加的一些效果。

          優點:適用于各種瀏覽器,包括令前端工程師頭疼的ie6。

          缺點:必須要設置彈出層的寬高。

          第二種:自適應內容寬高的彈出層

          運行效果

          css樣式

          html代碼

          還是只看我用紅色框框框起來的那幾行代碼。

          優點:不用設置彈出層寬高,彈出層的寬高隨內容自適應居中。

          缺點:只適用于ie10或以上版本及webkit內核的瀏覽器(像現在主流的雙核瀏覽器在高速模式下都可以的)。。

          如果要兼容其它內核瀏覽器(比如火狐),就改成這樣:

          以上就是小編常用的兩種彈出層在正中間顯示的方法,那么,你是用什么方法實現的呢?歡迎一起交流哦。

          謝謝你的閱讀,如果你有更好的方法或在應用過程中遇到問題可以在評論區提問或者直接私信我,我會定期回復,碼農劉小橋與你一起學習,共同進步。

          先,通過視頻了解一下我們要實現的效果,視頻如下:

          <script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          分析

          1.點擊彈出框,狀態框和遮擋層(背景變灰)就會顯示出來 display:block;

          2.點擊關閉按鈕,模態框和遮擋層就會隱藏起來 display:none;

          3.在頁面中拖拽的原理:鼠標按下并且移動,之后松開鼠標

          4.觸發事件是鼠標按下mousedown,鼠標移動mousemove,鼠標松開mouseup

          5.推拽過程:鼠標移動過程中,獲得最新的值賦給模態框的left和top值,這樣模態框就可以跟著鼠標走了

          6.鼠標按下出發的事件源是最上面一行,就是id為title

          7.鼠標的坐標減去鼠標在盒子內的坐標,才是真正模態框的位置

          8.鼠標按下,我們要得到鼠標在盒子的坐標

          9.鼠標移動,就讓模態框的坐標設置為:鼠標坐標減去盒子坐標即可,注意移動事件寫到按下事件里面

          10.鼠標松開,就是停止拖拽,就是可以讓鼠標移動事件解除

          代碼

          hrome 126 于近期發布了穩定版本,其中一個比較有意思的更新是給 HTML 帶來一個新的元素:<permission> ,它將從這個版本開始試用,并且正在努力走向標準化。

          今天我們一起來看下這個 <permission> 元素的用法。

          Web 權限提示的問題

          當 Web 應用程序需要訪問瀏覽器的高級功能時,需要向用戶主動請求許可。例如,當百度地圖使用 Geolocation API 獲取用戶的地理位置時,瀏覽器會提示用戶申請權限,這是權限規范中定義明確的概念。

          申請權限的觸發方式一般分為兩類,被動隱式觸發,或者主動顯示觸發:

          例如,Geolocation API 是一個強大的 API,它的使用依賴于首次使用時隱式詢問的方法。例如,當程序調用 navigator.geolocation.getCurrentPosition() 方法時,權限提示框會在第一次調用時自動彈出,還有另外一個例子是 navigator.mediaDevices.getUserMedia()。

          一些其他的 API,如 Notification APIDevice Orientation API,通常有一種顯式的方式通過靜態方法來請求權限,如 Notification.requestPermission()DeviceMotionEvent.requestPermission()。

          網站可以在加載時立即調用諸如 navigator.mediaDevices.getUserMedia()Notification.requestPermission() 等方法。這會導致在用戶還沒與網站進行交互時就彈出權限提示。這就是明顯的權限濫用行為,并且影響到兩種方式,既包括首次使用時的隱含詢問,也包括提前明確請求。

          權限濫用導致瀏覽器廠商要求有像點擊按鈕或按下按鍵這樣的用戶操作,然后才會顯示權限提示。這種方法的問題在于,瀏覽器很難確定某個特定的用戶操作是否應該導致顯示權限提示。也許用戶只是因為頁面加載時間太長而在頁面上隨意某個地方隨便點擊,有些網站也變得非常擅長誘騙用戶點擊內容來觸發提示。

          另一個問題是權限提示框通常顯示的方式:在網站的 “死亡線” 之上(特別是在大屏幕上),也就是說,在應用程序能夠繪制到的瀏覽器窗口區域之外。用戶在剛剛點擊了窗口底部的一個按鈕后,可能會錯過瀏覽器窗口頂部的提示,這種情況還是挺常見的。當瀏覽器有應對權限濫用的緩解措施時,這個問題往往會更加嚴重。

          另外,用戶一旦做出了拒絕某個權限的操作,之后想要改變就不太容易了。他們得找到特定的地方,比如那個網站信息下拉菜單,然后去進行重置或調整權限的操作,而且還得重新加載頁面才行。網站也沒辦法提供很方便的途徑讓用戶快速改變權限狀態,還得詳細地告訴用戶怎么去找到地方改變設置。

          如果某個權限是非常重要的,比如視頻會議軟件要用麥克風權限,那像谷歌會議這類的軟件就會彈出很顯眼的對話框來告訴用戶怎么去把之前阻止的權限給開通。

          <permission>元素

          為了解決上面的這些問題,<permission> 元素誕生了。這個元素允許開發者以聲明方式請求使用權限,如下例所示:

          <permission type="camera" />

          “type” 屬性代表你正在請求的權限列表(如果有多個可以以空格分割)。目前,允許的值是 'camera','microphone' 以及 'camera microphone'。默認情況下,這個元素呈現出來的樣子類似于具有最簡用戶代理樣式的按鈕。

          對于某些允許附加參數的權限,type-ext 屬性接受以空格分隔的鍵值對,例如 precise:true 地理位置權限。

          當用戶與 <permission> 元素交互時,他們可以循環經歷各個階段:

          如果他們之前不允許某項功能,他們可以在每次訪問時允許該功能,或者在當前訪問時允許該功能。

          如果他們之前允許該功能,他們可以繼續允許,或者停止允許。

          如果他們之前不允許某項功能,他們可以繼續不允許它,或者這次允許它。

          <permission> 元素的文本會根據狀態自動更新。例如,如果已授予使用某項功能的權限,則文本會更改為表示允許使用該功能。如果需要先授予權限,則文本會更改為邀請用戶使用該功能。將之前的屏幕截圖與以下屏幕截圖進行比較,以查看這兩種狀態。

          <permission> 元素可以與 Permissions API 一起使用。有許多事件可供監聽:

          • onpromptdismiss:當元素觸發的權限提示被用戶關閉(例如,單擊關閉按鈕或單擊提示之外)時,會觸發此事件。
          • onpromptaction:當元素觸發的權限提示已被用戶對提示本身采取某種操作解決時,觸發此事件。這并不一定意味著權限狀態已經改變,用戶可能已經采取了維持現狀的操作(例如繼續允許權限)。
          • onvalidationstatuschange:當元素從 "valid" 切換到 "invalid" 時觸發此事件,例如當元素被其他超文本標記語言內容部分遮擋時,會認為是 "invalid"。

          我們可以直接在 HTML 代碼中內聯注冊這些事件的事件監聽器(<permission type="…" onpromptdismiss="alert('The prompt was dismissed');" />),或者在 <permission> 元素上使用 addEventListener()

          <permission type="camera" />
          <script>
            const permission=document.querySelector('permission');
            permission.addEventListener('promptdismiss', showCameraWarning);
          
            function showCameraWarning() {
              // Show warning that the app isn't fully usable
              // unless the camera permission is granted.
            }
          
            const permissionStatus=await navigator.permissions.query({name: "camera"});
            permissionStatus.addEventListener('change', ()=> {
              // Run the check when the status changes.
              if (permissionStatus.state==="granted") {
                useCamera();
              }
              // Run the initial check.
              if (permissionStatus.state==="granted") {
                useCamera();
              }
            });
          </script>

          最后

          參考:https://developer.chrome.com/blog/permission-element-origin-trial


          主站蜘蛛池模板: 中文字幕精品一区| 国产精品毛片一区二区| 一本AV高清一区二区三区| 无码毛片一区二区三区中文字幕| 日韩电影一区二区三区| 日韩人妻精品一区二区三区视频 | 在线|一区二区三区四区| 精品女同一区二区三区在线 | 国产美女视频一区| 国产一区在线电影| 日韩一本之道一区中文字幕| 国产美女口爆吞精一区二区| 国产在线步兵一区二区三区| 国产乱子伦一区二区三区| 久久人做人爽一区二区三区| 国产一区二区三区国产精品| 鲁丝丝国产一区二区| 内射一区二区精品视频在线观看| 亚洲一区AV无码少妇电影| 国产福利一区视频| 国产成人无码AV一区二区| 美女视频在线一区二区三区| 福利一区福利二区| 精品一区精品二区制服| 国产精品制服丝袜一区| 538国产精品一区二区在线| 国产乱码精品一区二区三区麻豆| 国产乱人伦精品一区二区| 在线欧美精品一区二区三区| 精品女同一区二区三区在线| 国产a∨精品一区二区三区不卡| 色婷婷亚洲一区二区三区| 国产品无码一区二区三区在线蜜桃| 中文字幕一区二区三区人妻少妇| 一区二区三区电影网| 国产亚洲情侣一区二区无码AV | 亚洲AV综合色一区二区三区| 好吊妞视频一区二区| 亚洲综合无码一区二区| 亚洲国产高清在线一区二区三区 | 一区二区中文字幕|