整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          想摸魚嗎?先掌握這 19 個 css 技巧

          家好,我是刷碗智,今天來摸魚了。

          修改 placeholder 樣式,多行文本溢出,隱藏滾動條,修改光標顏色,水平和垂直居中。這些熟悉的場景啊! 前端開發(fā)者幾乎每天都會和它們打交道,這里有20個CSS技巧,讓我們一起來看看吧。

          1. 解決 img 5px 間距的問題

          你是否經(jīng)常遇到圖片底部多出5px間距的問題?不用急,這里有4種方法可以解決。

          方案1:設置父元素字體大小為 0

          關鍵代碼:

          .img-container{
            font-size: 0;
          }
          

          事例地址:https://codepen.io/qianlong/pen/VwrzoyE

          方案2:將 img 元素設置為 display: block

          關鍵代碼:

          img{
            display: block;
          }
          

          事例地址:https://codepen.io/qianlong/pen/eYeGONM

          方案3:將 img 元素設置為 vertical-align: bottom

          關鍵代碼:

          img{
            vertical-align: bottom;
          }
          

          事例地址:https://codepen.io/qianlong/pen/jOaGNWw

          解決方案4:給父元素設置 line-height: 5px

          關鍵代碼:

          .img-container{
            line-height: 5px;
          }
          

          事例地址:https://codepen.io/qianlong/pen/PoOJYzN

          2. 元素的高度與 window 的高度相同

          如何使元素與窗口一樣高?答案使用 height: 100vh;

          事例地址:https://codepen.io/qianlong/pen/xxPXKXe

          3. 修改 input placeholder 樣式

          關鍵代碼:

          .placehoder-custom::-webkit-input-placeholder {
            color: #babbc1;
            font-size: 12px;
          }
          
          

          事例地址:https://codepen.io/qianlong/pen/JjOrPOq

          4. 使用:not選擇器

          除了最后一個元素外,所有元素都需要一些樣式,使用 not 選擇器非常容易做到。

          如下圖所示:最后一個元素沒有底邊。

          關鍵代碼

          li:not(:last-child) {
            border-bottom: 1px solid #ebedf0;
          }
          
          

          事例地址:https://codepen.io/qianlong/pen/QWOqLQO

          5. 使用 flex 布局將一個元素智能地固定在底部

          當內容不夠時,按鈕應該在頁面的底部。當有足夠的內容時,按鈕應該跟隨內容。當你遇到類似的問題時,使用 flex 來實現(xiàn)智能的布局。

          事例地址:https://codepen.io/qianlong/pen/ZEaXzxM

          6. 使用caret-color來修改光標的顏色

          可以使用 caret-color 來修改光標的顏色,如下所示:

          caret-color: #ffd476;
          

          事例地址:https://codepen.io/qianlong/pen/YzErKvy

          7. 刪除type="number"末尾的箭頭

          默認情況下,在type="number"的末尾會出現(xiàn)一個小箭頭,但有時我們需要將其刪除。我們應該怎么做呢?

          關鍵代碼:

          .no-arrow::-webkit-outer-spin-button,
          .no-arrow::-webkit-inner-spin-button {
            -webkit-appearance: none;
          }
          
          

          事例地址:https://codepen.io/qianlong/pen/OJOxLrg

          8.outline:none刪除輸入狀態(tài)線

          當輸入框被選中時,它默認會有一條藍色的狀態(tài)線,可以通過使用 outline: none 來移除它。

          如下圖所示:第二個輸入框被移除,第一個輸入框沒有被移除。

          事件地址:https://codepen.io/qianlong/pen/YzErzKG

          9. 解決iOS滾動條被卡住的問題

          在蘋果手機上,經(jīng)常發(fā)生元素在滾動時被卡住的情況。這時,可以使用如下的 CSS 來支持彈性滾動。

          body,html{
            -webkit-overflow-scrolling: touch;
          }
          

          10. 繪制三角形

          .box {
            padding: 15px;
            background-color: #f5f6f9;
            border-radius: 6px;
            display: flex;
            align-items: center;
            justify-content: center;
          }
          
          .triangle {
            display: inline-block;
            margin-right: 10px;
            /* Base Style */
            border: solid 10px transparent;
          }
          /*下*/
          .triangle.bottom {
            border-top-color: #0097a7;
          }
          /*上*/
          .triangle.top {
            border-bottom-color: #b2ebf2;
          }
          /*左*/
          .triangle.left {
            border-right-color: #00bcd4;
          }
          /*右*/
          .triangle.right {
            border-left-color: #009688;
          }
          
          

          事例地址:https://codepen.io/qianlong/pen/rNYGNRe

          11. 繪制小箭頭、

          關鍵代碼:

          .box {
            padding: 15px;
            background-color: #ffffff;
            border-radius: 6px;
            display: flex;
            align-items: center;
            justify-content: center;
          }
          
          .arrow {
            display: inline-block;
            margin-right: 10px;
            width: 0;
            height: 0;
            /* Base Style */
            border: 16px solid;
            border-color: transparent #cddc39 transparent transparent;
            position: relative;
          }
          
          .arrow::after {
            content: "";
            position: absolute;
            right: -20px;
            top: -16px;
            border: 16px solid;
            border-color: transparent #fff transparent transparent;
          }
          /*下*/
          .arrow.bottom {
            transform: rotate(270deg);
          }
          /*上*/
          .arrow.top {
            transform: rotate(90deg);
          }
          /*左*/
          .arrow.left {
            transform: rotate(180deg);
          }
          /*右*/
          .arrow.right {
            transform: rotate(0deg);
          }
          
          

          事例地址:https://codepen.io/qianlong/pen/ZEaXEEP

          12. 圖像適配窗口大小

          事例地址:https://codepen.io/qianlong/pen/PoOJoPO

          13. 隱藏滾動條

          第一個滾動條是可見的,第二個滾動條是隱藏的。這意味著容器可以被滾動,但滾動條被隱藏起來,就像它是透明的一樣。

          關鍵代碼:

          .box-hide-scrollbar::-webkit-scrollbar {
            display: none; /* Chrome Safari */
          }
          

          事例地址:https://codepen.io/qianlong/pen/yLPzLeZ

          14. 自定義選定的文本樣式

          關鍵代碼:

          .box-custom::selection {
            color: #ffffff;
            background-color: #ff4c9f;
          }
          

          事例地址:https://codepen.io/qianlong/pen/jOaGOVQ

          15. 不允許選擇文本

          關鍵代碼:

          .box p:last-child {
            user-select: none;
          }
          

          事例地址:https://codepen.io/qianlong/pen/rNYGNyB

          16. 將一個元素在水平和垂直方向上居中

          關鍵代碼:

          display: flex;
          align-items: center;
          justify-content: center;
          

          事例地址:https://codepen.io/qianlong/pen/VwrMwWb

          17. 單行文本溢出時顯示省略號

          關鍵代碼:

            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
            max-width: 375px;
          

          事例地址:https://codepen.io/qianlong/pen/vYWeYJJ

          18. 多行文本溢出時顯示省略號

          關鍵代碼:

            overflow: hidden;
            text-overflow: ellipsis;
          
            display: -webkit-box;
            /* set n lines, including 1 */
            -webkit-line-clamp: 2;
            -webkit-box-orient: vertical;
          

          事例地址:https://codepen.io/qianlong/pen/ZEaXEJg

          19.使用 "filter:grayscale(1)",使頁面處于灰色模式。

          關鍵代碼:

          body{
            filter: grayscale(1);
          }
          

          作者:Matt Maribojoc 譯者:前端小智 來源:stackabuse 原文:https://javascript.plainenglish.io/20-css-tips-and-tricks-to-make-you-a-better-developer-d80ae5c09617

          開發(fā)交互式用戶界面時,層級樣式表 (CSS) 非常強大。 CSS 有一些驚人的隱藏提示和技巧,可以用來改善你的網(wǎng)站的外觀。

          在本文中,將介紹每個前端開發(fā)人員在開發(fā)出色且用戶友好的網(wǎng)頁時需要知道的一些很棒的 CSS 技巧。

          1.首字下沉

          可以在 CSS 中實現(xiàn)首字下沉。 它看起來很簡單。 比如下面顯示的圖像和代碼片段。

          p:first-letter {
              font-size: 3rem;
          }

          2.給文字添加漸變

          為文本添加漸變使文本提供了令人驚嘆的顏色。

          它還為你的設計添加了一些引人注目的功能。

          要向文本添加漸變,它采用下面顯示的代碼片段的形式。

          p {
            font-size: 48px;
            background: -webkit-linear-gradient(#eee, #333);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
          }

          3. 使用 SVG 遮罩圖像

          有了這個功能,我們可以在 SVG 中屏蔽圖像。 檢查下面顯示的圖像。

          CSS 非常強大,為我們提供了許多可以實現(xiàn)的功能來實現(xiàn)此功能。

          
          <svg>
          <clippath id='clippath'>
          /* Enter your svg here*/
          </clippath>
          </svg>
          
          <style>
          img:{
          clip-path:url(#clippath)
          }
          </style>

          4. 使用圖像作為光標

          我們可以在 CSS 中使用圖像作為光標。 舉個例子,你想在你的內容上提供一個圖像光標。

          要執(zhí)行此操作,只需要提供如下代碼片段所示。

          h1{
              cursor:url("custom.gif"), auto;
          
          }

          5. 為列表標記設置樣式

          厭倦了普通無聊的列表?CSS 使列表的樣式成為可能。

          要自定義列表標記,只需要對 CSS 進行編碼,如下所示。

          ::marker{
            color:#f548r9;
            text-shadow:2px 2px black;
              
          }

          6. 設計視頻的字幕。

          CSS 具有強大的提示偽元素,可用于設置視頻中的字幕樣式。

          ::cue{
              color:green;
              background:red;
          }

          7. 用文字剪輯視頻

          CSS 使剪輯帶有文本的視頻成為可能。

          查看下面代碼片段。

          <link rel="preconnect" href="https://fonts.gstatic.com">
          <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap" rel="stylesheet">
          <stye>
          * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
          }
          
          
          .container {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 100%;
            height: 500px;
          }
          
          .container video {
            width: 100%;
            height: 100%;
          }
          
          .container .text {
            position: absolute;
            top: 0;
              line-height: 350px;
            width: 100%;
            height: 100%;
            text-align: center;
            background: #ffffff;
            mix-blend-mode: screen;
            font-size: 15em;
            font-family: 'Bebas Neue', sans-serif;
          }
          </style>
          <div class="container">
            <video autoplay loop muted>
              <source src="https://res.cloudinary.com/dptgkdbjg/video/upload/v1623121486/video_iqbbwc.mp4" type="video/mp4">
            </video>
            <div class="text">
              <p>OCEAN</p>
            </div>
          </div>

          8.平滑滾動

          雖然我們可以使用 JavaScript 實現(xiàn)平滑滾動,但 CSS 使我們可以更輕松地在我們的網(wǎng)站中實現(xiàn)平滑滾動。

          要啟用平滑滾動,需要將 smooth-behavior 設置為平滑。

          檢查下面顯示的代碼段。

          html{
            scroll-behavior:smooth;
          }

          9. 過濾圖像

          圖像構成了網(wǎng)絡的很大一部分,可以使用過濾器來模糊圖像。 也可以使用過濾器屬性來模糊、飽和、添加亮度、添加其他屬性中的飽和度。

          查看下面的代碼片段。

          .blur {
            filter: blur(5px);
          }
          
          .grayscale {
            filter: grayscale(100%);
          }
          
          .brightness {
            filter: brightness(150%);
          }
          
          .saturate {
            filter: saturate(200%);
          }
          
          .invert {
            filter: invert(100%);
          }
          
          .huerotate {
            filter: hue-rotate(180deg);
          }

          10. 自定義移動瀏覽器標題中的地址欄。

          看看下面顯示的圖像。 移動瀏覽器標題有多種顏色。 我們可以修改它并創(chuàng)建與我們網(wǎng)站的顏色主題相融合的顏色。

          要更改或自定義移動瀏覽器標題中的默認地址欄,我們需要包含元標記,如下面的代碼片段所示。

          <meta name='theme-color' content='#0575e6' />

          在元標記中,我們需要傳入兩個參數(shù),即名稱和內容,我們指定我們想要的顏色。 您可以在十六進制代碼中包含顏色。

          最后的想法

          當想要構建交互式用戶界面時,層級樣式表非常強大。

          這些只是我們可以在 CSS 中利用的一些提示和技巧。

          CSS技巧大雜燴◆◆

          01.Safari 中z-index的層級問題


          在Safari瀏覽器下(此Safari瀏覽器包括iOS的Safari,iPhone上的微信瀏覽器,以及Mac OS X系統(tǒng)的Safari瀏覽器),當我們使用3D transform變換的時候,如果祖先元素沒有overflow:hidden/scroll/auto等限制,則會直接忽略自身和其他元素的z-index層疊順序設置,而直接使用真實世界的3D視角進行渲染。例如下面的場景,圖中紅框里面的模塊,使用 3D transform變換,進行旋轉動畫,但是在Safari瀏覽器下,忽略了二維碼遮罩層的z-index,結果使用了真實世界的3D視角進行渲染。出現(xiàn)了重疊的bug:



          解決方法:

          1. 父級,任意父級,非body級別,設置overflow:hidden可恢復和其他瀏覽器一樣的渲染。
          2. 以毒攻毒。有時候,頁面復雜,我們不能給父級設置overflow:hidden,那么可以將被影響的元素設置一個足夠大的translateZ值就可以,如translateZ(100px)。

          02.文字居中兼容


          正常處理文字上下居中的手段是讓元素height和line-height相等,但是安卓環(huán)境下當字體大小<14px/0.7rem的時候會出現(xiàn)居中失效的情況。

          解決方法:

          1. 判斷系統(tǒng)環(huán)境(安卓/IOS)分別作微調;
          2. font-size、height、width全部放大為2倍,利用transform進行縮放
          height: 1rem;
          width: 2rem;
          font-size: 0.5rem;
          變成:
          height: 2rem;
          width: 4rem;
          font-size: 1rem;
          transform: scale(0.5);
          

          但由于放大之后占據(jù)空間,左右會留白,需要利用margin負值 margin: -0.35rem -0.45rem 0;調整

          3.有解決方案是將rem改為px。

          03.2個a標簽做90度旋轉bug

          定義了一個動畫效果如下(sass代碼):

          @keyframes official-featured_rotate {
          	10%,50%{
           transform:rotateY(90deg);
           }
           60%,100%{
           transform:rotateY(0deg);
           }
          }
          &-rotate {
           position: absolute;
           width: rem(350/2);
           height: rem(160/2);
           transform-style:preserve-3d;
           transform:translate3d(0,0,0);
           &.ani_rotate {
           animation:official-featured_rotate 5s linear 0s infinite;
           animation-delay: 2s;
           }
           &__item {
           width: rem(350/2);
           height: rem(160/2);
           position: absolute;
           &:nth-child(1) {
           transform: translateZ(rem(350/4));
           }
           &:nth-child(2) {
           transform: rotateY(90deg) translate3d(0,0,rem(350/4));
           }
           }
          }
          

          這里是2個a標簽,做90度的旋轉效果使得兩個a可以循環(huán)切換展示。這里2個的基本樣式是一致的,寬高也一樣。但是在安卓下(ios正常)只有打開頁面能看到的第一個a標簽能正常跳轉,能正常綁定事件。第二個a不能跳轉,我就想那我通過點擊事件來跳轉可以不,結果綁定任何事件都不生效。

          解決方法:

          然后測試發(fā)現(xiàn),在旋轉過程中(只要未完全旋轉90度)點擊還是能一切正常的。于是把旋轉角度改為了89.99度,一切正常。動畫效果修改為:

          @keyframes official-featured_rotate {
           10%,50%{ 
           transform:rotateY(-89.99deg); 
           }
           60%,100%{ 
           transform:rotateY(0deg); 
           } 
          }
          

          后來查找了一下stackoverflow(https://stackoverflow.com/questions/23548612/cant-click-on-buttons-after-css-transform)。里面也是說了這個解決方法。

          04.使用currentColor來簡化css

          設置border-color、background-color等顏色的時候,可以使用currentColor[與當前元素的字體顏色相同]來簡化css。

          .div{
           color: rgba(0,0,0,.85);
           font-weight: 500;
           text-align: left;
           padding: 20px;
           border: solid 1px currentColor;
          }
          

          05.灰色濾鏡做樣式的disable


          灰色圖可以直接加濾鏡,不用切多一張圖。如圖:

          解決方法:

          .coupon_style .disable {
           -webkit-filter: grayscale(1);
          }
          

          06.曲線陰影的實現(xiàn)

          • 多個陰影重疊,就是正常陰影+曲線陰影
          • 正常情況下,有個矩形有正常的陰影,作為主投影,這時候再定義一個有一定弧度圓角的圓角矩形,然后放在正常矩形的下面,并露出一點點底部有弧度的陰影,這樣的話就可以形成曲線投影的效果。

          效果:



          代碼:


          07.翹邊陰影的實現(xiàn)


          利用:before和:after,加上絕對定位的性質,可以形成一個矩形,這個時候結合CSS3的傾斜屬性skew和旋轉屬性rote。就可以形成一個有旋轉角度的平行四邊形,這個時候再和原來的矩形重疊,則可產生翹邊效果。

          效果:



          代碼:





          08.用-webkit-mask實現(xiàn)蒙版

          效果圖:



          代碼:

          background: url("images/logo.png") no-repeat;-webkit-mask : url("images/mask.png");
          

          mask.png中黑色代表是不透明的(alpha:1),其他部分為透明的(alpha:0),將它蓋在背景圖上,注意:背景圖對應mask.png中透明的位置也會變成透明,留下非透明的形狀,即背景圖的可見形狀與mask.png的可見形狀相同,即為"蒙版"。

          09.圖片自適應占位方式

          當圖片未正確加載,或加載完成前,由于圖片高度為0,其容器會因為沒有內容,導致容器無法撐高而塌陷,而如果加載較慢則會在圖片加載完成后出現(xiàn)閃爍的情況。

          css中,當padding-top/bottom值為百分比時,其值都是以其父元素的寬度為參照對象。因此對于寬高比例固定的情況,可以利用padding-top/bottom用于圖片自適應占位,解決頁面閃爍的問題。

          如果僅設置值padding-top/bottom為百分比,會出現(xiàn)一個問題,就是該方法容器的max-height屬性會失效,就無法限制容器的最大高度了。

          因此,可以給容器添加一個偽元素的子元素用于撐起內容,該子元素擁有一個padding-top:100%,同時給容器一個max-height嘗試限制容器的高度,最后內容用絕對定位的方式添加即可。如:

          #container{
           width: 50%;
           max-height:300px;
           background-color:#ddd;
           /*由于margin存在塌陷的問題,需要通過構建BFC來保證容器不會受到影響,因此這里可以給容器一個overflow:hidden來保證偽元素的margin不會塌陷。*/
           overflow:hidden;
           position: relative; /* 父容器相對定位 */
          }
          .placeholder::after{
           content:"";
           display:block;
           margin-top:100%;
          }
          img{
           position:absolute; /* 內容絕對定位 */
           left: 50%;
           top: 50%;
           transform: translateX(-50%) translateY(-50%); /* 控制內容絕對定位位置 */
           width:80%; /* 控制圖片不溢出,因此這里使用的圖片實際寬度受父容器影響 */
          }
          

          但是對于寬高比例不定的圖片來說,這樣做可能導致圖片顯示不全,使用時要注意。

          10.頁面自適應最佳實踐

          經(jīng)過大型項目實踐,下面這段CSS是最好的基于rem和vm和calc實踐代碼:

          html {
           font-size: 16px;
          }
          @media screen and (min-width: 375px) {
           html {
           /* iPhone6的375px尺寸作為16px基準,414px正好18px大小, 600 20px */
           font-size: calc(100% + 2 * (100vw - 375px) / 39);
           font-size: calc(16px + 2 * (100vw - 375px) / 39);
           }
          }
          @media screen and (min-width: 414px) {
           html {
           /* 414px-1000px每100像素寬字體增加1px(18px-22px) */
           font-size: calc(112.5% + 4 * (100vw - 414px) / 586);
           font-size: calc(18px + 4 * (100vw - 414px) / 586);
           }
          }
          @media screen and (min-width: 600px) {
           html {
           /* 600px-1000px每100像素寬字體增加1px(20px-24px) */
           font-size: calc(125% + 4 * (100vw - 600px) / 400);
           font-size: calc(20px + 4 * (100vw - 600px) / 400);
           }
          }
          @media screen and (min-width: 1000px) {
           html {
           /* 1000px往后是每100像素0.5px增加 */
           font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000);
           font-size: calc(22px + 6 * (100vw - 1000px) / 1000);
           }
          }
          

          ◆◆最后◆◆

          有興趣學習前端的小伙伴們,可以私信回復(1)

          感謝您的閱讀!

          回復《1》獲取


          主站蜘蛛池模板: 日韩伦理一区二区| 日本人的色道www免费一区| 国产一区二区三区美女| 亚洲乱码国产一区三区| 日韩精品无码久久一区二区三| 中文字幕一区二区人妻性色| 3D动漫精品一区二区三区| 国产一区韩国女主播| 少妇一晚三次一区二区三区| 亚洲日本va午夜中文字幕一区| 日本精品少妇一区二区三区| 蜜臀AV无码一区二区三区| 精品人伦一区二区三区潘金莲| 亚洲无人区一区二区三区| 精品一区二区三区视频| 99国产精品欧美一区二区三区| 国产成人精品久久一区二区三区| 国产亚洲一区二区在线观看| 国产一区二区好的精华液| 亚洲另类无码一区二区三区| 亚洲一区电影在线观看| 亚洲综合一区二区| 一区二区精品在线| 极品尤物一区二区三区| 国产精品视频免费一区二区| 色综合视频一区中文字幕| 色综合久久一区二区三区| 国产女人乱人伦精品一区二区| 相泽南亚洲一区二区在线播放| 国产精品熟女一区二区| 上原亚衣一区二区在线观看| 国产日韩AV免费无码一区二区| 视频一区二区三区免费观看| 国产免费私拍一区二区三区| 免费一区二区无码视频在线播放| 视频一区二区在线观看| A国产一区二区免费入口| 国产福利精品一区二区| 精品深夜AV无码一区二区| 欧美成人aaa片一区国产精品| 日本精品视频一区二区|