家好,我是刷碗智,今天來摸魚了。
修改 placeholder 樣式,多行文本溢出,隱藏滾動條,修改光標顏色,水平和垂直居中。這些熟悉的場景啊! 前端開發(fā)者幾乎每天都會和它們打交道,這里有20個CSS技巧,讓我們一起來看看吧。
你是否經(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
如何使元素與窗口一樣高?答案使用 height: 100vh;
事例地址:https://codepen.io/qianlong/pen/xxPXKXe
關鍵代碼:
.placehoder-custom::-webkit-input-placeholder {
color: #babbc1;
font-size: 12px;
}
事例地址:https://codepen.io/qianlong/pen/JjOrPOq
除了最后一個元素外,所有元素都需要一些樣式,使用 not 選擇器非常容易做到。
如下圖所示:最后一個元素沒有底邊。
關鍵代碼
li:not(:last-child) {
border-bottom: 1px solid #ebedf0;
}
事例地址:https://codepen.io/qianlong/pen/QWOqLQO
當內容不夠時,按鈕應該在頁面的底部。當有足夠的內容時,按鈕應該跟隨內容。當你遇到類似的問題時,使用 flex 來實現(xiàn)智能的布局。
事例地址:https://codepen.io/qianlong/pen/ZEaXzxM
可以使用 caret-color 來修改光標的顏色,如下所示:
caret-color: #ffd476;
事例地址:https://codepen.io/qianlong/pen/YzErKvy
默認情況下,在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
當輸入框被選中時,它默認會有一條藍色的狀態(tài)線,可以通過使用 outline: none 來移除它。
如下圖所示:第二個輸入框被移除,第一個輸入框沒有被移除。
事件地址:https://codepen.io/qianlong/pen/YzErzKG
在蘋果手機上,經(jīng)常發(fā)生元素在滾動時被卡住的情況。這時,可以使用如下的 CSS 來支持彈性滾動。
body,html{
-webkit-overflow-scrolling: touch;
}
.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
關鍵代碼:
.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
事例地址:https://codepen.io/qianlong/pen/PoOJoPO
第一個滾動條是可見的,第二個滾動條是隱藏的。這意味著容器可以被滾動,但滾動條被隱藏起來,就像它是透明的一樣。
關鍵代碼:
.box-hide-scrollbar::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
事例地址:https://codepen.io/qianlong/pen/yLPzLeZ
關鍵代碼:
.box-custom::selection {
color: #ffffff;
background-color: #ff4c9f;
}
事例地址:https://codepen.io/qianlong/pen/jOaGOVQ
關鍵代碼:
.box p:last-child {
user-select: none;
}
事例地址:https://codepen.io/qianlong/pen/rNYGNyB
關鍵代碼:
display: flex;
align-items: center;
justify-content: center;
事例地址:https://codepen.io/qianlong/pen/VwrMwWb
關鍵代碼:
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 375px;
事例地址:https://codepen.io/qianlong/pen/vYWeYJJ
關鍵代碼:
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
關鍵代碼:
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 技巧。
可以在 CSS 中實現(xiàn)首字下沉。 它看起來很簡單。 比如下面顯示的圖像和代碼片段。
p:first-letter {
font-size: 3rem;
}
為文本添加漸變使文本提供了令人驚嘆的顏色。
它還為你的設計添加了一些引人注目的功能。
要向文本添加漸變,它采用下面顯示的代碼片段的形式。
p {
font-size: 48px;
background: -webkit-linear-gradient(#eee, #333);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
有了這個功能,我們可以在 SVG 中屏蔽圖像。 檢查下面顯示的圖像。
CSS 非常強大,為我們提供了許多可以實現(xiàn)的功能來實現(xiàn)此功能。
<svg>
<clippath id='clippath'>
/* Enter your svg here*/
</clippath>
</svg>
<style>
img:{
clip-path:url(#clippath)
}
</style>
我們可以在 CSS 中使用圖像作為光標。 舉個例子,你想在你的內容上提供一個圖像光標。
要執(zhí)行此操作,只需要提供如下代碼片段所示。
h1{
cursor:url("custom.gif"), auto;
}
厭倦了普通無聊的列表?CSS 使列表的樣式成為可能。
要自定義列表標記,只需要對 CSS 進行編碼,如下所示。
::marker{
color:#f548r9;
text-shadow:2px 2px black;
}
CSS 具有強大的提示偽元素,可用于設置視頻中的字幕樣式。
::cue{
color:green;
background:red;
}
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>
雖然我們可以使用 JavaScript 實現(xiàn)平滑滾動,但 CSS 使我們可以更輕松地在我們的網(wǎng)站中實現(xiàn)平滑滾動。
要啟用平滑滾動,需要將 smooth-behavior 設置為平滑。
檢查下面顯示的代碼段。
html{
scroll-behavior:smooth;
}
圖像構成了網(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);
}
看看下面顯示的圖像。 移動瀏覽器標題有多種顏色。 我們可以修改它并創(chuàng)建與我們網(wǎng)站的顏色主題相融合的顏色。
要更改或自定義移動瀏覽器標題中的默認地址欄,我們需要包含元標記,如下面的代碼片段所示。
<meta name='theme-color' content='#0575e6' />
在元標記中,我們需要傳入兩個參數(shù),即名稱和內容,我們指定我們想要的顏色。 您可以在十六進制代碼中包含顏色。
當想要構建交互式用戶界面時,層級樣式表非常強大。
這些只是我們可以在 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:
解決方法:
02.文字居中兼容
正常處理文字上下居中的手段是讓元素height和line-height相等,但是安卓環(huán)境下當字體大小<14px/0.7rem的時候會出現(xiàn)居中失效的情況。
解決方法:
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》獲取
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。