css菜雞的自我救贖

2021-09-11 12:27:44 字數 3742 閱讀 5959

作為乙個不喜歡寫樣式的前端,遇到了直接對外的活動頁面的需求,一下炸出一堆問題:

沒錯,就是很簡單的乙個css,實現的方法有很多。然後我們再看一下這個視覺效果要怎麼實現:

img+脫離文字流的方法?雙div+定位?

其實,乙個div+padding馬上解決,div背景100%然後center+padding-top,div裡面的文字就自然到下面去了,然後定位定準就好了。另外,文字換成偽元素也可以。

一些人也知道,padding的百分比相對於width,那麼這樣就可以實現了乙個等比例的盒子,然後隨便縮放都可以了。比如做乙個正方形,邊長是螢幕寬度一半:

.scale50 

複製**

很多時候,我們需要什麼4:3,16:9的,就可以用這樣的方法解決了。

對於這個欄的左邊部分,用margin還是padding呢?這個情況當然是padding,因為有乙個邊線?。對於這個欄的上面,是padding還是margin呢?實際上,在這個情況下都是一樣的,但是有乙個潛在問題:如果有兩行,而且垂直方向還有其他盒子的margin,那麼就會發生垂直方向的margin坍塌(取較大值);或者當有父盒子包裹,他的margin會走到外面影響外面。這時候,又要加上轉化為bfc的**。

比如,有乙個設計稿是這樣的:

可能看起來是居中,然後很快寫出來子絕父相的萬金油居中。然後設計突然走過來說,怎麼總是感覺有點不對啊,於是看一下下半部分:

真的不是居中啊,水平方向的也是。那麼,這時候,寫死margin不就搞定了,保證視覺不來找你。

?...許多天後,測試說,某某手機視覺就出問題了。當然,寫死px肯定藥丸啊,所以移動端就是要用rem解決。我這裡乙個rem等於50px,那換算一下,圖上第乙個div(綠色的鉤)的margin就是176 148 0 151,換成rem是3.52 2.96 0 3.02,後面的樣式問題只要不是橫屏或者ipad的(無視覺稿的前提)都不是你的鍋了。

正的就是撐開整個margin-box,那負的我們就可以想象出來,吃掉這個margin-box。一般的情況下,就是平移。如果加上了float就神奇了,還能跨行平移。雙飛翼和聖杯布局其中一部分就是利用這個原理

前面都是廢話,不就是乙個盒子模型嘛。沒錯,盒子模型,誰都知道,但是用起來誰用的好,這就難說了

接下來,準備用n種方法實現三列布局,中間自適應,兩邊固定寬度

html:

class="container">

class="m">中間div>

class="l">左邊div>

class="r">右邊div>

div>

複製**

css:

.container

.l, .m, .r

.l .m

.r 複製**

分析:不論順序,流式布局,中間先載入,但用了calc

"calc?! 避免recalculate啊"

這時候,去吧,ie盒模型:

.m 

複製**

看一下對比:

還是一樣的html

.container 

.m, .l, .r

.m .l

.r 複製**

很多人說這個難懂,其實我們可以一步步來:先放好容器設好寬高背景,三個div是mlr順序。然後float,顯然m自己佔一行,其他兩個佔一行。

接著,用到負margin,先把左邊到移動一行,即是-100%,右邊就移動乙個身位-50px就ok,現在已經是視覺上的3列。最後,中間部分開頭被遮住,而且佔了100%行寬。那麼我們只能用容器的padding或者自己的margin壓自己。

如果是用容器padding,將左右兩邊騰出來,剛剛好放下lr兩個div。最後,l和r還是在m裡面,所以還要移一下,relative就好。這就是聖杯布局

如果是用自己的margin壓自己,那麼就需要多乙個div包住自己。前面步驟一樣,包住自己的div佔滿一行,但是自身有margin,完美解決。這就是雙飛翼布局。圖示和上圖基本一模一樣,只是最外那層不是container而是m,真正的展示出來的中間部分是m裡面的div,另外,l和r也不用relative了。

"m">

"margin-setting">

中間複製**

這是傳統css+div的一套比較好的解決方案,不過我們愁的是高的問題了,需要自己設

class="container">

class="l">左邊div>

class="m">這是中間內容div>

class="r">右邊div>

div>

複製**

這次的html不能調換順序寫了

.container 

.m, .l, .r

.m .l

.r 複製**

類似於前面的absolute方案,calc可以用ie盒子替代

是不是遇到過行內元素總是有間隔的問題,html加注釋就可以去掉分隔符,當然這裡要實現3列布局:

class="l">左邊div>

class="m">中間div>

class="r">右邊div>

複製**

css:

.l, .m, .r 

.l .m

.r 複製**

特點:樣式及其脆弱,內容換行馬上崩了,只能在沒文字的情況好一點。calc還是一樣的方法,ie盒子完美解決

class="container"

l="左邊">中間div>

class="r">右邊div>

複製**

左邊的內容用attr抓

.container 

.container

::before

.r 複製**

用content做的內容,注定了左邊不能再放html元素了

html還是按順序:

class="container">

class="l">左邊div>

class="m">這是中間內容

div>

class="r">右邊div>

div>

複製**

.container 

.l .m

.r 複製**

不過,我更看好grid,符合程式設計師思維,乙個配置,兩行**,基本搞定大部分場景

.container 

.container

div:nth-of-type(1)

.container

div:nth-of-type(2)

.container

div:nth-of-type(3)

複製**

css:

div 

div::before

div::after

複製**

當然,只是娛樂而已,專案上誰會寫這個。某些小裝飾可能有機會上

又瞎搞一堆亂七八糟的,先冷靜一下

牛飛盤隊(弱雞的DP自我救贖)

題面 老唐最近迷上了飛盤,約翰想和他一起玩,於是打算從他家的n頭奶牛中選出一支隊伍。每只奶牛的能力為整數,第i頭奶牛的能力為r i 飛盤隊的隊員數量不能少於 1 大於n。一支隊伍的總能力就是所有隊員能力的總和約翰比較迷信,他的幸運數字是f,所以他要求隊伍的總能力必須是f的倍數。請幫他 算一下,符合這...

菜雞的自救之路

博主研二在讀,渾渾噩噩,一無所學。一朝面臨畢業求職,惶惶恐恐,雖無大志,但也不甘墮落。於是今日開啟菜雞的自我拯救之路,爭取通過數月乃至一年的努力,不求成為大神,起碼脫離菜雞稱號,等來年春招,在面臨殘酷的競爭時不至於任人宰割。首先明確需要點亮的技能樹都有哪些 畢業要緊,最理想的情況當然是在滿足科研專案...

2018 11 21!鹹魚自我救贖之路的開始

千言萬語,不知從何說起 既然這樣,先介紹一下自己吧。我是一條鹹魚,從小的時候就是一條鹹魚。無論在什麼方面都沒有出眾的地方。大學學習的是軟體工程,出來這兩年卻去做了別的職業,東奔西走。最近突然開始思考 我的路在 我的事業在 快27歲了,眼看著周 圍的同學朋友都走上了人生正軌,而我卻還是個讓家人擔心的孩...