css 基础+实战布局
一、margin
margin与可视尺寸
- 适用于,没有设定
width/height
的普通block
水平元素 - 只适用于水平方向
利用这一特性实现一侧定宽自适应布局
margin与占据尺寸
- 适用于block/inline-block水平元素,inline元素可设置margin-left和margin-right,设置margin-top、margin-bottom 无效。
- 与有没有设定width/height值无关
- 适用于垂直和水平方向
百分比margin
垂直和水平方向的百分比都是相对于父元素的宽度计算的
margin重叠
- block元素,不包括float和absolute元素
- 只发生在垂直方向(margin-top/bottom)
margin重叠的情境
-
相邻的兄弟元素
图片.png -
父级和第一个/最后一个子元素
图片.png
图片.png -
空的block元素
图片.png
图片.png
margin中auto
auto 适用设置固定宽度的块元素
-
一侧是定值,一侧auto,auto为剩余空间大小(如果只设置margin-right:100px,是不生效的)
图片.png -
两侧都是auto,则会居中显示
-
垂直居中显示
.father{ height:200px;width:400px; writing-mode:vertical-lr .son{ height:100px;width:100px;margin:auto; }
给父级设置样式
writing-mode:vertical-lr
改成垂直流布局,子 元素设置样式;margin:auto
,这种情况水平方向就不能居中了。
-
绝对定位元素设置auto,水平垂直都居中
图片.png
margin负值下的两端对齐
-
margin改变元素尺寸
列表两端对齐,每个元素之间还设置margin值
图片.png
margin失效情形
- inline水平元素的垂直margin无效
- margin重叠
- display:table-cell/display:table-row 等声明的margin无效
- 绝对定位元素非定位的margin值“无效”
比如不给绝对定位元素设置bottom
值,设置margin-bottom
值是无效的,margin-right
一样。
二、overflow
注意:
- 如果overflow-x 和 overflow-y 值相同等同于 overflow
- 如果overflow-x 和 overflow-y 其中一个设置为visible(默认值),另一个设置成hidden、auto、,设置visible的会被重置成 auto
使用条件
- 非display:inline水平
- 对应方位的尺寸限制。
width/height/max-width/max-height/absolute拉伸 - 对于单元格 td 等,还需要Table为 table-layout:fixed 状态才行
浏览器兼容问题
浏览器IE7,文字越多,元素两侧padding留白就越大
解决办法:给元素添加样式 overflow:visible
overflow与滚动条
默认滚动条来自 <html>
,而不是<body>
标签。
去除页面默认滚动条,只需
html{overflow:hidden}
JS获取滚动条高度
- 谷歌:
document.body.scrollTop
- 其他:
document.documentElement.scrollTop
兼容写法
var top=`document.body.scrollTop || document.documentElement.scrollTop
滚动条会占用容器的可用宽度和高度
图片.png 图片.png
1、水平居中跳动问题修复(当出现滚动条时,页面右侧会有空白)
解决办法:
html{overflow-y:scroll}
-
.container{padding-left:calc(100vw-100%)}
,100vw是浏览器宽度,100% 是可用内容宽度
2、overflow与两栏自适应布局(左侧浮动,右侧自适应)
图片.png
解决办法 给右侧 div 加css样式overflow:hidden
overflow与absolute
- overflow:hidden失效
子元素绝对定位时
解决办法:给overflow元素添加position:relative
三、float
-
自适应布局,右侧固定,左侧自适应
图片.png
<div class="warp-right">
<div class="content-left"> ..... </div>
<img src="./135.jpg" alt="" srcset="">
</div>
.content-left{
float: left;
margin-right: 80px;
}
.warp-right img{
float: left;
width: 50px;
margin-left: -50px;
}
-
自适应布局,左侧固定,右侧自适应
图片.png
<div class="warp-right">
<img src="./135.jpg" alt="" srcset="">
<div class="content-right"> ..... </div>
</div>
.warp-right img{
float: left;
width: 50px;
}
.content-right{
overflow: hidden;
}
四、absolute
小图标,absolute的应用
图片.png这样布局的好处
- 导航中,当内容改变时,小图标的位置也会跟着移动,不会出现重叠的现象(自适应)
- 不用给父级设置
position
,当父级改变时也不受影响
absolute + margin实现下拉框
图片.png这种实现方式自适应比较强,当浏览器大小改变时,位置不容易发生改变。
文本图标对齐
图片.pngabsolute 与整体布局
使div占满整个屏幕,使用拉伸
<body>
<div class="page"></div>
</body>
body{
width: 100%;
height: 100%;
}
.page{
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
头、侧边栏、内容区、底部 , 布局
图片.png
绝对定位整个页面布局
图片.png
absolute 元素垂直 水平 居中
- 水平居中
.box{ position: absolute; width: 100px; height: 100px; left: 0; right: 0; margin: auto; }
- 垂直居中
.box{ position: absolute; width: 100px; height: 100px; top: 0; bottom: 0; margin: auto; }
注意: 设置absloute 可以使 inline元素具有block元素的特性
五、line-height
- 对内联元素、table-cel 起作用
- 内联元素是由行高决定的
- 行高具有继承性
- 内容区域高度+行间距=行高
内容区域高度与字体和字号有关,与line-height无关
字体为宋体时,内容区域高度=font-size大小
body全局数值行高使用经验,匹配20像素
body{font-size:14px;line-height:1.4286} // 20/14
line-height 的实际应用
- 图片垂直居中(接近居中)
-
多行文本垂直居中
图片.png
六、vertical-align
vertical-align 的百分比值是相对于 line-height计算的
vertical-align 起作用的前提
- inline ,inline-block 水平元素
- table-cell 元素
默认情况下(不对元素display设置)支持vertical-align的有:
图片、文字、按钮、单元格
实战布局
-
<p><img src=" "/></p>
使图片垂直居中
p{display:table-cell; vertical-align:middle}
-
图片和文字始终垂直居中对齐
图片.png
<div>
<span>文字</span>
<img src=" "/>
</div>
span{display:inline-block;width:200px;vertical-align:middle}
img{vertical-align:middle}
- 小图标和文字对齐
vertical-align 负值 -
不定尺寸图片或多行文字垂直居中
图片.png
七、relative
relative 与 absolute
-
限制absolute元素定位
图片.png -
限制层级
absolute 外层没有被relative元素包裹时,层级高的在上面
图片.png
当 外部被relative元素包裹时,层级关系就由relative元素设置的 z-index 来控制
图片.png
-
限制超越 overflow
overflow:hidden,对absolute元素是不起作用的。给absolute外层父元素设置relative、overflow:hidden,可以限制超越
图片.png
relative 与 fixed
- 限制层级
relative 定位
相对自身原来位置定位,还占有原来的位置。
八、z-index
不考虑css3的情况下,只有定位的元素才起作用(position:relative/absolute/fixed/sticky)不包括static
z-index 与定位元素
-
如果定位元素 z-index 发生嵌套,祖先优先原则,(z-index 为数值)
图片.png
z-index 相关实践
图片.png九、padding
- 对于 block 元素
padding值暴走(超过宽),一定会影响尺寸
width 非auto(设置固定宽度),会影响尺寸
width为 auto 或者 box-sizing:border-box,同时padding没有暴走,不影响尺寸。 - 对于inline 水平元素
水平 padding 影响尺寸,垂直padding 不影响尺寸,但是会影响背景色。
padding 百分比
是相对于元素的宽,利用这一特性可以实现正方形
标签元素padding
- 所有浏览器 radio/checkbox 单选框无内置padding
十、border
dashed 虚线
dotted 点线
double 双线
border实现三角
图片.png-
第一种
图片.png
.triangle{
border-width:12px 20px;
border-style: solid;
border-color:gold gold transparent transparent;
}
drop-shadow 给 png 图标赋色
图片.png
icon{filter:drop-shadow(20px 0 #ff8040)}
十一、背景图像
背景图像区域
-
background-clip属性
指定背景绘制区域
background-clip:border-box | padding-box | content-box
参数说明:-
border-box:背景被剪裁到边框(内容区+padding区+边框区都显示背景)
图片.png -
padding-box:背景被剪裁到内边距框(内容区+padding区)
图片.png -
content-box:背景被剪裁到内容框 (内容区 显示背景)
图片.png
-
背景图像定位
-
background-origin属性 (兼容性需注意)
background-origin属性指定background-position属性应该是相对位置
background-origin:border-box | padding-box | content-box
背景图像大小
-
background-size属性
background-size:length | percentage | cover | contain
- background-size:100%
根据元素来计算,当只设置一个参数时,背景按图片宽度等比例缩放 - background-size: 800px 固定尺寸
- background-size:cover
将背景图片等比缩放以填满整个容器,不留白 - background-size:contain
即将背景图片等比缩放至某一边紧贴容器边缘为止(会留白)
- background-size:100%
十二、css 渐变
渐变可以在两个或多个指定颜色之间显示平稳的过渡
线性渐变
是沿着一根轴线改变颜色,从起点到终点颜色进行顺序渐变
background:linear-gradient(direction,color-stop1,color-stop2,.......)
-
从上到下 (默认)
background:linear-gradient(color-stop1,color-stop2,.......)
图片.png -
从左到右
不同浏览器内核,写的方式不一样
实例background:-webkit- linear-gradient(begin-direction,#44A504,#C5DF99) background: -moz-linear-gradient(end-direction,#44A504,#C5DF99) background : -o-linear-gradient(end-direction,#44A504,#C5DF99) background: linear-gradient(to end-direction,#44A504,#C5DF99)
background:-webkit- linear-gradient(left,#44A504,#C5DF99) background: -moz-linear-gradient(right,#44A504,#C5DF99) background : -o-linear-gradient(right,#44A504,#C5DF99) background: linear-gradient(to right,#44A504,#C5DF99)
-
对角
实例background:-webkit- linear-gradient(begin-level begin-vertical,#44A504,#C5DF99) background: -moz-linear-gradient(end-level end-vertical,#44A504,#C5DF99) background : -o-linear-gradient(end-level end-vertical,#44A504,#C5DF99) background: linear-gradient(to end-level end-vertical,#44A504,#C5DF99)
background:-webkit- linear-gradient(left top,#F84812,#DFC999); background: -moz-linear-gradient(right bottom,#F84812,#DFC999); background : -o-linear-gradient(right bottom,#F84812,#DFC999); background: linear-gradient(to right bottom,#F84812,#DFC999);
-
多个颜色
background: linear-gradient(to right,#44A504,#A0F387,r#DFA209,#DFC999);
在颜色后面加
百分比
background: linear-gradient(to right,#44A504 10%,#A0F387 40%,#DFA209 60%,#DFC999) 100%;
从 10% 到 40% 是从 #44A504
到 #A0F387
的渐变
从 40% 到 60% 是从 #A0F387
到 #DFA209
的渐变
从 60% 到 100% 是从 #DFA209
到 #DFC999
的渐变
最后一个不写 默认是 100%,第一个不写默认是0
-
透明度渐变
background:linear-gradient(to right, rgba(255, 0, 0, 0),rgba(255, 0, 0,1));
十三、css 盒阴影 box-shadow属性
box-shadow属性可以设置一个或多个下拉阴影的框
box-shadow:h-shadow v-shadow blur spread color inset
参数说明:
- h-shadow 水平方向偏移量
- v-shadow 竖直方向偏移量
- blur 模糊度,不能设赋值
- spread 扩展多少
- color:颜色
- inset 内阴影还是外阴影
只设置了偏移量,没有设置模糊度
图片.png
十三、边界图片 border-image
border-image-source属性
指定要是用的图像,而不是由border-style属性设置的边框样式。
border-image-slice属性
指定图像的边界向内偏移
border-image-slice:number | % | fill
border-image-width属性
十四、选择器
子元素选择器
只能选择某元素的子元素 (直接后代选择器)
语法格式: 父元素 > 子元素
图片.png
相邻兄弟元素选择器
相邻兄弟元素选择器 可以选择紧接在另一元素后的兄弟元素,他们具有一个相同的父元素
语法格式 :元素 + 兄弟相邻元素
例子:选择除了 第一个 li 以外的 li
ul li + li{}
通用兄弟选择器
选择某元素后面的所有兄弟元素,他们具有一个相同的父元素
语法格式:元素 ~ 后面兄弟元素
属性选择器
-
Element [ attribute ]
为带有 attribute 属性的 Element 元素设置样式
a[href]{color:red} a[href="#"]{color:red}
-
Element [ attribute ~="value" ]
选择 attribute 属性包含单词 “value”的元素,并其设置样式
图片.png -
Element [ attribute ^="value" ]
选择 attribute 属性值以 “value”开头的元素,并其设置样式
-
Element [ attribute $="value" ]
选择 attribute 属性值以 “value”结尾的元素,并其设置样式
-
Element [ attribute *="value" ]
设置attribute 属性值 包含 “value” 的所有元素样式
图片.png -
Element [ attribute |="value" ]
选择 attribute 属性值为 "value" 或以 "value—" 开头的元素,并设置样式。
伪类选择器
-
动态伪类选择器
这些伪类并不存在html 中,只有当用户和网站交互的时候才能体现出来
锚点伪类:
:link :visited (链接/访问过)
用户行为伪类::focus :hover :active (获取光标/鼠标经过/正在访问)
-
UI元素伪类
-
:enabled
:可编辑的 -
:disabled
: 禁用的 -
:checked
图片.png
-
结构伪类
-
Element :first-child
选择属于其父元素的
图片.png首个子元素
的每个 Element 元素
图片.png -
Element :last-child
选择属于其父元素的
最后一个子元素
的每个 Element 元素 -
Element :nth-child(N)
选择器匹配属于其父元素的第 N 个子元素,
不论元素类型
- nth-child(2n) 偶数
- nth-child(2n+1) 奇数
- nth-child(3n+1) 、 nth-child(n+4)从第四个开始
-
nth-child(odd)奇数、 nth-child(even) 偶数
图片.png
-
Element :nth-last-child(N)
匹配属于其元素的第 N 个子元素的每个子元素,不论元素的类型,从最后一个子元素开始计数。
-
Element :nth-of-type(N)
匹配属于父元素的
特定类型
的第N 个子元素的每个元素 -
Element :first-of-type
-
Element :last-of-type
-
Element :only-child
匹配属于其父元素的
图片.png唯一
子元素的每个元素(只有他自己一个孩子)
-
Element :empty
匹配
图片.png没有
子元素(包括文本节点)的每个元素
-
否定选择器 (:not)
:not(Element/selector) 选择匹配非指定 元素/选择器的每个元素
语法格式:
父元素:not(子元素/子选择器)
css 权重
-
权重等级:
行内样式(1000) > ID选择器 >类、属性选择器和伪类选择器(10)>元素和伪元素(1)>*(0)
-
权重计算:
从0开始,一个行内样式+1000,一个id+100,一个属性选择器、class或者伪类+10,一个元素或者伪元素+1
-
css 权重规则:
- ID 选择器(#idValue)的权重比属性选择器([id="idValue"])高
-
带有向下问关系的选择器比单纯的元素选择器权重高
图片.png -
与元素 “挨得近” 的规则生效,比如嵌套css
-
最后定义的这条规则会覆盖上面与之冲突的规则
-
无论多少个元素组成的选择器,都没有一个class选择器权重高
-
通配符选择器权重是0,被继承的 css 属性也带有权重,权重是0
伪元素
语法格式 :元素::伪元素
-
Element::first-line
first-line 伪元素中的样式对 Element元素的一个行文本进行格式化,只能用于 块元素
图片.png -
Element::first-letter
用于向文本的首字符设置特殊样式,只能用于 块元素
图片.png -
Element::selection
用于设置在浏览器中的选中文本后的背景色与前景色
图片.png