可能一說組成部分,小夥伴們就直接懵了,開門見山地說,別怕,還有更懵的在後面呢!
組成分為兩大部分: shell
和 核心(其中核心是核心部分,它代表著瀏覽器所使用的技術手段,而shell
就是我們使用者所看到的介面)
例舉你知道的比較大的瀏覽器產商?
shell | 核心 |
---|---|
Google Chrome | webkit(谷歌和蘋果safari一起開發)/ blink(谷歌將技術獨立出來) |
safari | webkit |
firefox | gecko |
IE | trident |
opera(目前屬於360和崑崙萬維) | presto |
===== 手動分界線 =====
分界線的意義:分介面下面部分只是在 shell
上做了手段,沒有專屬的核心。我們回答的話答分界線上部分即可。
包含渲染(rendering)引擎 和 JS 引擎
渲染引擎如字面意思,就是渲染我們頁面的,大致瞭解即可,本文在這裡講解一下 JS
引擎。 JS
引擎早期是不存在的,通過同步渲染引擎來負責JS
的解析。而渲染引擎效能是有限的,所以JS解析程式碼能力就比較低,100行多程式碼可能就崩潰了。因此,引入了 JS
引擎,大大加大了對 JS
解析的優化,速度相當快。
比較有名的就是谷歌推出的 V8
引擎,針對 JS
解析做了非常多的優化。只能一句,谷歌,牛!
cascading style sheet
(層疊樣式表)
<!-- 內聯樣式 -->
<div style="width: 100px; height: 100px;"></div>
<style type="text/css">
/* 內部樣式 */
div{
width: 100px;
height: 100px;
background-color: #000;
}
</style>
<!-- 外部樣式 -->
<link rel="stylesheet" href="./index.css">
檢視如下程式碼,會顯示什麼顏色呢?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS樣式基礎</title>
<!-- 外部樣式 -->
<link rel="stylesheet" href="./index.css">
<style type="text/css">
/* 內部樣式 */
div{
background-color: blue;
}
</style>
</head>
<body>
<div style="background-color: red;"></div>
</body>
</html>
外部樣式 index.css
檔案程式碼如下:
div{
width: 100px;
height: 100px;
background-color: yellow;
}
答案是 紅色
權重:內聯樣式(用的較少,可以使用 display: none
快取資料) > 內部樣式表(一般測試用) > 外部樣式表(主要使用方式)
!important > id > class | 屬性 > 標籤 > *
清除輸入框的輪廓
input,
textarea{
outline: none;
}
從下到上,從右到左
button{
border: none; // 去掉按鈕的邊框
color: white; // 更改按鈕字型顏色
background-color: red; // 更改按鈕顏色
font-size: 12px; // 更改字型大小
}
div{
width: 200px;
height: 22px;
border: 1px solid #000;
white-space: nowrap; /*不換行*/
overflow: hidden; /*超出部分隱藏*/
text-overflow: ellipsis; /*隱藏部分加省略號*/
}
visibility:hidden
保留被隱藏的元素所佔據的HTML檔案空間
display:none
不保留被隱藏的元素所佔據的HTML檔案空間
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>行內塊和行內元素文字對齊問題</title>
<style type="text/css">
.block{
display: inline-block;
width: 150px;
height: 100px;
border: 1px solid #000;
vertical-align: middle; /*對齊*/
}
</style>
</head>
<body>
<span class="block">123</span>
<span>123</span>
</body>
</html>
1、將容器的 display 設定為 table
2、將容器內的文字的 display 設定成 table-cell (表格單元格屬性)
3、將容器內的文字的 vertical-aligin 設定成 middle
在產生邊距的行內塊的父元素設定屬性:font-size:0px;
在父元素上設定,word-spacing(詞邊距)的值設為合適的負值即可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>水平垂直居中方式1</title>
<style type="text/css">
.box {
width: 100px;
height: 100px;
padding: 30px;
border: 1px solid #000;
}
.box .box1 {
width: 100%;
height: 100%;
background-color: orange;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
</div>
</body>
</html>
ie8 -> 上下16px 左右8px
ie7 -> 上下15px 左右11px
浮動流,塊級元素無法識別浮動流元素的位置。而定位 position
會新建一個圖層。
內聯、內聯塊、浮動、溢位隱藏、純文字都可以識別浮動元素的位置,除了塊級元素。
float以後,元素就變成內聯塊級元素
因為設定了浮動流了之後,塊級元素沒辦法識別浮動流元素的位置,自然會出現高度塌陷的問題。可採用如下方式清除,通過一個塊級元素,設定 clear: both
即可,但此方法不是特別好,額外新增了一個元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清除浮動方式1</title>
<style type="text/css">
.box {
width: 200px;
border: 1px solid #000;
}
.box .inner-box{
float: left;
width: 100px;
height: 100px;
}
.box .inner-box.box1{
background-color: green;
}
.box .inner-box.box2{
background-color: orange;
}
.clearfix{
clear: both;
}
</style>
</head>
<body>
<div class="box">
<div class="inner-box box1"></div>
<div class="inner-box box2"></div>
<p class="clearfix"></p>
</div>
</body>
</html>
直接看下面例子,看看偽類是怎麼使用的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>偽類簡單使用</title>
<style type="text/css">
p:before{
content: "Chocolate";
}
p:after{
content: "寫部落格!";
}
</style>
</head>
<body>
<p>喜歡</p>
</body>
</html>
其中, content
這個屬性值必須加上!
利用偽元素來清除浮動,通過新增一個塊級並且設定 clear:both
來清除。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清除浮動方式2</title>
<style type="text/css">
ul::after,
div::after{
content: "";
display: block;
clear: both;
}
.box {
width: 200px;
border: 10px solid #000;
}
/* 下面這種方式也可以,但沒有上述直接設定div好 */
/* .box::after{
content: "";
display: block;
clear: both;
} */
.box .inner-box{
float: left;
width: 100px;
height: 100px;
}
.box .inner-box.box1{
background-color: green;
}
.box .inner-box.box2{
background-color: orange;
}
</style>
</head>
<body>
<div class="box">
<div class="inner-box box1"></div>
<div class="inner-box box2"></div>
</div>
</body>
</html>
下面才是清除浮動的最好方式,直接寫一個類 clearfix
,然後需要清除浮動的話,直接在父級元素上新增這個類就好了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清除浮動方式3</title>
<style type="text/css">
.clearfix::after{
content: "";
display: block;
clear: both;
}
.box {
width: 200px;
border: 10px solid #000;
}
.box .inner-box{
float: left;
width: 100px;
height: 100px;
}
.box .inner-box.box1{
background-color: green;
}
.box .inner-box.box2{
background-color: orange;
}
</style>
</head>
<body>
<div class="box clearfix">
<div class="inner-box box1"></div>
<div class="inner-box box2"></div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>content動態資料獲取</title>
<style type="text/css">
p::before{
content: attr(data-username);
}
</style>
</head>
<body>
<p data-username="Chocolate">,歡迎您的來訪!</p>
</body>
</html>
box-shadow:水平位置(必) 垂直位置(必)模糊距離 陰影的尺寸(相當於在水平和垂直上的一個增量) 陰影顏色 陰影的種類
相容性寫法
-webkit-box-shadow: 0 0 10px;
-moz-box-shadow: 0 0 10px;
-o-box-shadow: 0 0 10px;
純圓 50% 寬高一樣
半圓角 height/2 + px
遇到圖片突出覆蓋問題,可以用 overflow: hidden
來解決。
.banner{
width: 100%;
height: 600px;
background-color: orange;
background-image: url(img/xxx.jpg);
background-repeat: no-repeat;
background-size: cover;
background-position: center center;
}
background-attachment
有兩個屬性值, scrool
(預設值,會跟隨卷軸而變化),fixed
(不會隨著卷軸變化)
html{
height: 100%;
background-color: orange;
background-image: url(img/xxx.jpg);
background-size: 100% 100%;
background-attachment: fixed;
}
解決因為網路問題導致css載入不出來時有一個補救措施
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>logo公司常用寫法模板</title>
<style type="text/css">
h1{
margin: 0;
}
.logo{
width: 142px;
height: 58px;
}
.logo h1 .logo-hd{
display: block;
width: 142px;
height: 0;
padding-top: 58px;
background: url(img/logo.png) no-repeat 0 0/142px 58px;
overflow: hidden;
}
</style>
</head>
<body>
<div class="logo">
<h1>
<a href="" class="logo-hd">淘寶網</a>
</h1>
</div>
</body>
</html>
它解決了什麼問題?
還是講解一下 margin塌陷問題,如下程式碼,當我們在子級盒子裡面設定 margin-top
發現會帶著父級盒子一起下去了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BFC:margin塌陷問題</title>
<style type="text/css">
.box1{
width: 300px;
height: 300px;
background-color: #000;
}
.box2{
width: 50px;
height: 50px;
margin: 0 auto;
margin-top: 100px;
background-color: orange;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>
解決方式,就是利用BFC特性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BFC:margin塌陷問題</title>
<style type="text/css">
.box1{
/* 可選方式 */
/* border: 1px solid transparent; */
/* 解決方式,形成BFC */
/* display: inline-block; */
/* display: table-cell; */
/* overflow: hidden; */
/* float: left; */
width: 300px;
height: 300px;
background-color: #000;
}
.box2{
width: 50px;
height: 50px;
margin: 0 auto;
margin-top: 100px;
background-color: orange;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>
感謝小野老師的對CSS的細緻講解,給老師打call,建議大家可以結合視訊看一看,看完會恍然大悟的!
文章產出不易,還望各位小夥伴們支援一波!
往期精選:
leetcode-javascript:LeetCode 力扣的 JavaScript 解題倉庫,前端刷題路線(思維導圖)
小夥伴們可以在Issues中提交自己的解題程式碼,🤝 歡迎Contributing,可打卡刷題,Give a ⭐️ if this project helped you!
存取超逸の部落格,方便小夥伴閱讀玩耍~
學如逆水行舟,不進則退