Python自動化開發學習15-css補充內容

來源:互聯網
上載者:User

標籤:布局   參考   ie11   -o   版本   元素   如何   關係   visible   

上節回顧

上一節學習的內容,有一下幾點,可以注意一下。或者說推薦這麼做。

class可以設定多個值-css樣式重用

可以給一個標籤設定多個class值,這樣我們可以為每個class應用一種樣式。標籤有多個class的話,就為這個標籤應用了多個樣式。並且之後別的標籤要求重用其中的部分樣式,只需要設定那個class就好了。
要設定多個class的值,只需要用空格隔開每個值即可。下面的例子分別設定了背景色、高度、寬度、外框,然後div的設定了多個class:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .c1{            background-color: red;        }        .c2{            height: 50px;        }        .c3{            width: 200px;        }        .c4{            border: 3px solid black;        }    </style></head><body><div class="c1 c2 c3 c4"></div><div class="c1 c2 c4"></div></body>
div做頁面配置的建議

把整個網頁先從上到下分成若干塊,每一塊都按下面的思路。
先寫第一層div,可以設定背景色,如果有需要設定高度(height)和垂直置中(line-height),設了高度就是固定的高度,我們要確保內部的元素不會超出。不設高度,這個div的高度就靠內部的元素撐起來。
不要設定寬度。讓它可以撐滿一整塊。
再寫第二層div,這個設定一個像素的寬度。這樣你整塊的內容都限制在這個地區內。如果頁面寬度太小,頁面下方會出現捲軸,而不會導致這裡面的內容會混亂。
第三層開始可以寫你的內容,可以繼續用div也可以用別的標籤,寬度可以使用百分比了。繼續用像素也ok,不過如果第二次的寬度要調整,並且裡面寬度用的是百分比的話,貌似就是自動調整好了。如果用了float,最後不要忘記clear。

<body><div class="lv1" style="background-color: #dddddd;height: 48px;line-height: 48px;">    <div class="lv2" style="width: 800px;">        <div style="width: 30%;float: left;">左邊的內容</div>        <div style="width: 70%;float: left;">中間的內容</div>        <div style="clear: both;"></div>    </div></div></body>
img標籤的建議

在a標籤裡的img標籤(圖片),可能在IE上開啟的時候,在最外面有一圈藍色的邊框。雖然我在自己的IE11上試了,並沒有,可能舊版本還有這個問題。這個邊框的顏色應該就是超連結字型的顏色,我們所要做的就是把img外面這個邊框去掉。做法也很簡單,寫一個img的標籤選取器,設定border為0就沒有邊框了。我們可以總是在head裡加上這麼一個標籤選取器來避免這個問題,而不用擔心對沒有類似問題的用戶端會有什麼影響:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        img{            border: 0;        }    </style></head><body><a href="http://www.51cto.com/">    <img src="logo.jpg" /></a></body>
css補充

上一節的css內容並沒有講完,這節繼續講後續的內容。

定位-position

position 屬性定義建立元素布局所用的定位機制。

fixed-固定在視窗的某個位置

position: fixed; :固定在視窗的某個位置。結合top、right、botom、left,確定固定的位置。
在頁面右下角放置一個返回頂部的按鈕,用position定位:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .gotop{            width: 45px;            height: 45px;            background-color: black;            color: yellow;            position: fixed;            right: 15px;            bottom: 60px;        }    </style></head><body><div style="height: 2000px;background-color: #dddddd"></div><div class="gotop">返回頂部</div></body>

這裡並不能實現返回頂部的效果,我們還需要後面才會學的JavaScript才能實現點擊之後返回頁面頂部。
再來實現一個始終顯示在頁面頂部的菜單:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .bar{            height: 48px;            line-height: 48px;            background-color: red;            position: fixed;            top: 0;            left: 0;            right: 0;        }    </style></head><body style="margin: 0 auto"><div class="bar">菜單</div><div class="bar" style="top: 50px;left: unset;right: unset;">菜單2</div><div style="height: 2000px;background-color: #dddddd;margin-top: 100px">主要內容</div></body>

和之前學的float一樣,這裡使用position樣式之後,div也不再撐滿一整行了。我們通過設定left和right屬性,讓他往兩邊都撐滿了。下面的菜單2是沒有設定left和right的效果。
另外,因為使用position,會有一個分層的效果。下面的div標籤的內容也是從頁面頂部開始顯示的。為了不讓菜單蓋住主要內容,我們給下面的div設定了外邊距(margin-top)。分開了兩部分的內容。

absolute-絕對位置

這個和fixed都是決定定位。所以主要來看看和fixed的差別。把上面的返回頂部的例子裡的position屬性修改為absolute,看看效果。乍一看,貌似一樣,但是如果滾動滾輪,就是發現,他會一起移動。也就是absolute絕對位置了之後,就會固定在父級元素之上。
把上面菜單的例子也改成absolute,菜單依然在頁面頂上,但是往下流量頁面 後,菜單就會向上滾出螢幕了。
ablolute單獨的應用情境不多,主要是結合下面要將講的相對定位一起使用。把一個元素絕對位置到另一個相對定位的元素上。

relative-相對定位

上面測試absolute的時候提到,他是絕對位置到它的父級元素上的。上面的例子中實際是決定定位在了整個頁面上。如果要將它定位在另外一個元素裡,簡單的在外層加上一個元素標籤是沒用的。還需要在元素上加上 position: relative; 這個屬性,才會被識別為 absolute 的父級標籤。

<body><div style="height: 50px;width: 100px;border: 1px solid black;position: relative;">    <div style="background-color: red;position: absolute;bottom: 0;left: 0;right: 0;">相對定位</div></div></body>

設定位移量:這裡也有top、right、bottom、left屬性。這裡設定的位移量。如果設定位移屬性,就是相對於其正常位置所進行的位移。

定位在螢幕中間

用了position屬性之後,通過 margin: 0 auto 無法實現置中了。那麼現在置中要怎麼做呢。
位移量的屬性不但可以使用像素(px),也是可以使用百分比的。設定為50%自然就置中了。但是這裡定位是元素的起始位置,即左上方而不是中心。所以還得計算元素高度和寬度的一半,用外邊距把元素撐回去:

<body><div style="background-color: red;height: 80px;width: 80px;position: fixed;top: 50%;left: 50%;margin-top: -40px;margin-left: -40px;">正中間</div></body>
分層(z-index)

元素應用了position屬性之後,就會出現分層的情況。position元素會始終位於其他標準元素的上層。如下的例子,無論div的先後順序如何,都是position元素在上層:

<body><div style="position: fixed;top: 20px;left: 20px;background-color: red;height: 70px;width: 70px;"></div><div style="height: 100px;width: 100px;background-color: blue;"></div></body>

如此,我們就把頁面分成了2層。那麼有2層,就能有3層甚至多層。
z-index 屬性,設定元素的堆疊順序。僅能在定位元素上奏效(例如 position:absolute;)。數值越大,處於外層,可以是負數。不設定的話應該是0

<body><div style="z-index: 10;position: fixed;top: 30px;left: 30px;background-color: yellow;height: 50px;width: 50px;"></div><div style="z-index: 5;position: fixed;top: 20px;left: 20px;background-color: red;height: 70px;width: 70px;"></div><div style="height: 100px;width: 100px;background-color: blue;"></div></body>

例子中,如果不設定z-index,或者值設定的一樣,那麼層級的關係就是不確定的。調整標籤的順序,效果會不一樣(後面的標籤會蓋住前面的)。設定了z-index後,我們就能確定定位元素的層級關係。

透明度-opacity

上面已經學了網頁的層級,下層的頁面會被上層的頁面覆蓋掉。這裡我們可以設定標籤的opacity屬性,使得上層頁面不是完全覆蓋下面的內容,而是有一點的透明度。
opacity 屬性,透明度。取值範圍從 0.0 (完全透明)到 1.0(完全不透明)。

<body><div style="font-size: 48px">網頁的內容</div><div style="opacity: 0.8;background-color: #dddddd;position: fixed;top: 0;left: 0;bottom: 0;right: 0"></div></body>
小結-綜合應用

我們可以設計一個這樣的頁面。平時顯示正常的內容(這是第一層)。當我們點擊了一個按鈕需要提交資料的時候,這時候需要屏蔽掉使用者對之前的頁面內容的操作。這時候出現一個第二層,半透明的覆蓋層,就如透明度裡的例子那樣。然後再在頁面的中間彈出一個表單(第三層),讓使用者提交資料。這三層的代碼大概是這樣的:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .lv1{            background-color: aquamarine;            font-size: 64px;        }        .lv2{            background-color: #dddddd;            position: fixed;            top: 0;            left: 0;            bottom: 0;            right: 0;            z-index: 2;            opacity: 0.8;        }        .lv3{            height: 50px;            width: 100px;            position: fixed;            top: 30px;            left: 50%;            z-index: 3;            margin-left: -50px;        }        .disappear{            display: none;        }    </style></head><body><div class="lv1">網頁的內容</div><div class="lv2 disappear">    <!--覆蓋掉網頁的內容的半透明層--></div><div class="lv3 disappear">    <form action="https://www.baidu.com/s">        <input type="text" name="wd" title="搜尋內容" />        <input type="submit" value="搜尋" />    </form></div></body>

直接開啟頁面,應該只顯示了第一層的內容,另外兩層暫時設定了 display :none; 隱藏了。這裡JS還沒學,網頁的內容裡可以加上一個按鈕,觸發一個JS,修改一下.disappear裡的display屬性,改成unset(就是沒有設定)。這裡我們只能暫時先手動改一下看一下效果了。修改後,第二層和第三層的內容就都顯示出來了。先覆蓋掉頁面的內容,此時使用者無法在選擇第一層的內容了。然後中間是彈出的互動介面,使用者可以輸入內容提交表單,或者是以後會學的其他互動內容。

溢出處理-overflow

先來看一下顯示圖片的例子。找一張大一點的圖片,然後放在一個div裡。div設定小一點的高度和寬度。效果如下:

<body><div style="height: 100px;width: 80px;">    <img src="1.jpg" /></div><div style="background-color: red;">看看這個內容在哪裡</div></body>

這裡雖然div設定了範圍,但是div中的圖片會按照正常尺寸顯示出來,並沒有受到上一層div標籤尺寸的限制,即溢出了。後面還加了一個div,可以看到是接在前一個div的範圍後顯示的。
要處理這個問題,我們可以為圖片也設定一個尺寸,比如:style="height: 100%" 。這樣可以顯示出整張完整的圖片,但是會自適應一個尺寸。
這裡要講的是通過在div裡設定overflow屬性,來處理溢出內容的處理規則(圖片尺寸不變)。
overflow: hidden; :內容會被修剪,並且其餘內容是不可見的。
overflow: auto; :如果內容被修剪,則瀏覽器會顯示捲軸以便查看其餘的內容。
overflow: scroll; :同上,和auto一樣。
這裡拿圖片舉例,但是實際應用中,各種可能會有溢出的情況都可以這麼處理。一般圖片的處理更多的應該是設定一個img的尺寸,做一下縮放。而在一個有限大小的地區內要顯示很多的文字,更加適合用overflow:

<body><div style="background-color: #dddddd;height: 100px;width: 150px;overflow: auto;">    這個屬性定義溢出元素內容區的內容會如何處理。    如果值為 scroll 或 auto,則會提供一種滾動機制。    如果值為 hidden,則溢出的部分會被修剪並隱藏。    預設值是 visible。</div>
:hover 偽類

當滑鼠移動到元素上時,才會生效的css屬性。下面是一個菜單的例子,應用了hover實現了當滑鼠放上去的時候,指向的那項會改變樣式:

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .pg-header{            position: fixed;            top: 0;            left: 0;            right: 0;            height: 48px;            line-height: 48px;            background-color: blue;        }        .pg-body{            margin-top: 48px;        }        .w{            width: 980px;            margin: 0 auto;        }        .pg-header .menu{            color: white;            /*預設行內標籤不能設定高度,*/            /*這裡設定了display: inline-block;,*/            /*這樣標籤就能有高度了*/            /*這樣a標籤就撐滿了整個地區。*/            /*這裡也沒設定具體的高度,貌似預設就撐滿了。*/            display: inline-block;            padding: 0 10px;        }        .pg-header .menu:hover{            background-color: green;            color: red;        }    </style></head><body><div class="pg-header">    <div class="w">        <a class="menu">檔案</a>        <a class="menu">編輯</a>        <a class="menu">查看</a>        <a class="menu">收藏</a>    </div></div><div class="pg-body">    <div class="w">主要的內容</div></div></body>

另外這裡a標籤樣式的設定也值得參考。這裡設定了 display: inline-block; ,使得a標籤的高度可以撐滿整個div的高度。如果注釋掉display,a標籤的高度就只有文字的那點高度(可以通過滑鼠移至上方看到效果)。橫向的寬度這裡推薦是用內邊距(padding)撐開的。

背景圖片-background

之前都是用background設定背景色,我們也可以用圖片當背景。代碼如下:

<body><div style="background-image: url(‘1.jpg‘);height: 800px;width: 600px"></div></body>

這裡的效果會重複使用這張圖片平鋪在整個地區中。圖片的比例不變,多出的部分會裁剪掉。

網頁漸層色背景

利用平鋪的特性,可以實現漸層色背景的效果。做一個寬1像素,長1000像素的漸層圖片,在這張圖片裡搞好漸層,然後作為背景圖片。被平鋪之後,就是一個漸層色背景了。這個方法應該是通用的。

限制平鋪的方向

在上面的基礎上,再增加一個background-repeat屬性可以顯示圖片進行平鋪。

<body><div style="background-image: url(‘1.jpg‘);height: 800px;width: 600px;background-repeat: no-repeat"></div></body>

background-repeat: no-repeat :不允許平鋪
background-repeat: repeat-x :只能橫向平鋪
background-repeat: repeat-y :只能縱向平鋪

定位背景圖(摳圖)

有這麼一張圖:

好吧,是很多個小表徵圖拼成的一張圖,現在要顯示其中的一個表徵圖。我們可以這麼做:

<body><div style="background-image: url(‘2.png‘);background-repeat: no-repeat;border: 1px solid black;height: 20px;width: 20px;"></div></body>

這樣顯示第一個表徵圖沒問題,如果要顯示下面的表徵圖,我們需要把圖片往上移,這就用到了background-position屬性,給背景圖做一個定位:

<body><div style="background-image: url(‘2.png‘);background-repeat: no-repeat;background-position: 1px -119px;border: 1px solid black;height: 20px;width: 20px;"></div></body>

background-position-x 和 background-position-y 是單獨調整x軸和y軸。
上面的background屬性還可以簡寫成這樣:background: url(2.png) 1px -119px no-repeat; ,圖片路徑、縱向位移、橫向位移、是否平鋪。
這樣做的好處是,一次請求就獲得了好幾個表徵圖,減少了用戶端和服務端的互動次數。如果每一個小表徵圖都儲存一張獨立的圖片,那麼每次要擷取到一個新表徵圖可能還會發起一次請求。所以對於這種小表徵圖可以拼接在一張圖中使用。

小結-課堂練習

做一個右邊有表徵圖的input框,類似這樣的:

運用上面講的定位和背景圖片的方法,把表徵圖定位到方框的右邊。
這裡要注意,input的文字的輸入範圍右邊要小於整個邊框的範圍,否則最右邊的內容會被表徵圖擋住。

<body><div style="height: 24px;width: 150px;position: relative;">    <input type="text" style="height: 24px;width: 125px;padding-right: 25px;" />    <span style="background: url(2.png) 1px -119px no-repeat;    display: inline-block;    height: 20px;width: 20px;    position: absolute;top: 5px;right: 0;"></span></div></body>

Python自動化開發學習15-css補充內容

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.