margin:auto
margin:auto,一般只设置给水平方向的margin
- 如果将left和right同时设置为auto,则会将两侧的外边距设置为相同的值,就可以使元素自动在父元素中
水平居中
如果只指定左外边距或右外边距的margin为auto,则会将外边距设置为最大值
margin重叠
网页中相邻的块
在垂直方向
的外边距会发生重叠
兄弟元素:兄弟元素间的垂直外边距相邻,外边距会取最大值而不是取和
父子元素:父子元素间的垂直外边距相邻,子元素的外边距会设置给父元素(又称为 margin塌陷)
为什么会发生margin重叠?
BFC布局规则规定:内部Box垂直方向距离由margin决定,属于同一个BFC的两个相邻Box的margin会发生重叠。
意义:流式布局中,一组块级列表设置同样的上下margin,相邻的列表之间不会有双倍margin的间隔
计算规则:正正取大值,正负值相加,负负最负值
解决方法:最好的解决margin重叠问题的方法就是了解它,避免它。垂直方向只设置一个方向的margin
- 兄弟元素
只给一个元素设置外边距
- 将其中一个兄弟元素放入BFC中
- 父子元素
用父元素padding代替子层元素margin
- 父元素设置BFC
- 给父元素加边框
margin负值
内联元素
1.内联元素不能设置 margin-top 和 margin-bottom 属性
2.内联元素可以设置 margin-left 和 margin-right
margin-left 为负值,产生向左的位移
margin-right 为负值,自身位置不变,后面的内联元素产生向左的位移
块级元素
1.margin-top 为负值,不管是否设置高度,是否脱离文档流,都不会增加高度,而是会产生向上的位移,其后元素受影响产生向上的位移
2.margin-bottom 为负值,自身无偏移(大小位置不会改变),其后元素受影响产生向上的位移
3.margin-left, margin-right为负值
1)元素本身没有宽度,会增加元素宽度
2)元素本身有宽度,会产生位移
块/行内元素特点
- 块级元素特点
1、独占一行
2、可以直接控制 宽/高 以及盒子模型的相关css属性(width/height/border/margin/padding)
3、在不设置宽度的情况下,宽度自动填满父元素宽度,高度由自身内容决定的
- 内联元素特点
1、在一行从左到右排列,达到父元素最大宽度时,自动折行;
2、不能直接控制 宽/高,宽/高由自身内容决定
3、可以设置CSS盒子模型的其他属性(margin/padding/border)
padding
内联元素可以设置水平方向的内边距,可以影响布局
内联元素可以设置垂直方向内边距,但是不会影响页面的布局
border
内联元素可以设置边框,但是垂直的边框不会影响到页面的布局,同内边距
外边距:
内联元素支持水平方向的外边距,而且水平方向的相邻外边距不会重叠,而是求和
内联元素不支持垂直外边距,设置了也无用
- 行内块元素
可以设置CSS盒子模型的所有属性(width/height/margin/padding/border)
在默认不设置宽度和高度的时候,宽高才是由本身内容决定的
行内元素和块状元素,区别?
- 块级元素设置padding、border改变布局,可以改变嵌套内容的框占据文档流中的范围(同样也影响背景的区域)
- 行内元素设置padding、border会影响背景区域,但不会改变垂直方向上的布局。结果会出现设置padding、border的背景覆盖上面的元素的元素内容,底部被当做背景,被下级元素覆盖。
伪类选择器
伪类用来表示元素的一种特殊状态
,当我们需要为处在这些特殊状态的元素设置样式时,就可以使用伪类
没访问过的链接 a:link
访问过的链接 a:visited(只能定义字体颜色)
鼠标滑过的链接 a:hover
正在点击的链接 a:active
hover和:active也可以为其他元素设置
p:hover{
background-color: yellow;
}
文本框获取焦点以后,修改背景颜色为黄色
input:focus{
background-color: yellow;
}
为p标签中选中的内容使用样式,可以使用:selection伪类,但只能定义被选择时的background-color,color及text-shadow
p:selection{
background-color: orange;
}
/*坑:nth-of-type以元素为中心*/,如果前面是类,则会选中所有带这个类名的元素
否定伪类:为所有的p元素设置一个背景颜色为黄色,除了class值为hello的
p:not(.hello){
background-color: yellow;
}
伪元素选择器
伪元素用来表示元素的一些特殊位置
,当我们需要为元素的特殊位置设置样式时,就可以使用伪元素
为p中第一个字符来设置一个特殊的样式:
p::first-letter {
color: red;
font-size: 20px;
}
为p中的第一行设置一个背景颜色为黄色:
p::first-line {
background-color: yellow;
}
::before / ::before
一般这两者都需要结合content这个样式一起使用,通过content可以向before或after的位置添加一些内容
::placeholder 用于控制表单输入框占位符的外观
省略号
- 单行文本省略号
p{
white-space: nowrap; /*禁止文字内容折行*/
overflow: hidden; /*超出部分溢出隐 藏*/
text-overflow: ellipsis; /*文字以省略号的方式隐藏*/
}
- 多行文本省略号
p{
display: -webkit-box; /* 弹性盒模型*/
-webkit-box-orient: vertical; /*文字垂直排列 */
-webkit-line-clamp:2; /*文字显示的行数*/
overflow: hidden; /*超出部分溢出隐藏*/
}
/* 只支持基于webkit内核的浏览器 */
背景
- background-color
- background-image
如果设置了 background-image,同时也建议设置 background-color(顺序无所谓)。当背景图像还没有请求到时可以显示背景颜色。
如果定义了多组背景图,且背景图之间有重叠,写在前面的将会盖在写在后面的图像之上。
- 如果背景图片大于元素,默认会显示图片的左上角
- 如果背景图片和元素一样大,则会将背景图片全部显示
- 如果背景图片小于元素大小,则会默认将背景图片平铺以充满元素
- background-repeat
- background-position
背景图片默认从元素的左上角显示
可选值:
该属性可以使用关键字(9种组合)来指定一个背景图片的位置(水平方向:left center right; 垂直方向:top center bottom)
如果只给出一个值,则第二个值默认是center,
- background-attachment
用来设置背景图片是否随页面一起滚动,必须先指定background-image
可选值:
scroll,默认值,背景图片随着窗口滚动
fixed,背景图片的定位永远相对于浏览器的窗口,不随页面滚动。一般都是设置给body
- background 复合属性
没有顺序的要求,也没有数量的要求
- background-size
可选值:
auto:默认值 , 即图像真实大小。
长度值 或 百分比 :一个值, 则用于定义宽度, 高度为默认值 auto, 根据宽度进行等比例缩放; 两个值, 分别作用于图像的宽和高。
cover:等比缩放背景图片以完全覆盖背景区,背景图像可能超出容器。
contain:等比缩放背景图片以完全装入背景区,背景图像始终被包含在容器中
- background-origin:设置 background-position 参考的原点
padding-box 默认值
border-box
content-box
- background-clip:设置 背景图片或颜色填充的范围
border-box 默认
padding-box
content-box
transition
transition在元素首次渲染还没有结束的情况下是不会被触发的
REM布局
html{
font-size: 100px;
}
#root{
margin: 0 auto;
max-width:750px;
}
html中添加脚本
//写在 body 标签的最上方
;(function() {
function computed () {
//获取当前设备宽度 和 设计稿宽度
let HTML = document.documentElement,
windowWidth = HTML.clientWidth,
designWidth = 750;
if(windowWidth > designWidth){
HTML.style.fontSize = '100px';
return ;
}
HTML.style.fontSize = (windowWidth / designWidth) * 100 + 'px'
}
computed()
window.addEventListener('resize',computed,false)
})()
继承
1、css中只有 color 或以 text-、font-、line-开头的属性才可以继承。
2、特殊标签
a标签的字体颜色和下划线是不能被继承,必须对a标签本身进行设置。
h标签的字体大小不能修改,必须对h标签本身进行修改。
CSS中可以和不可以继承的属性 https://www.cnblogs.com/thislbq/p/5882105.html
长度单位
- 像素px:一个px就相当于屏幕中的一个小点。
不同显示器一个像素的大小也不相同,显示效果越好,像素就越小。 - 百分比%:浏览器将会根据其父元素的样式来计算该值,在创建一个自适应的页面时,经常使用百分比作为单位
- em:它是相对于
当前元素的字体大小
来计算的
文本样式
- text-transform 设置文本的大小写
可选值:
capitalize 单词的首字母大写,通过空格来识别单词
uppercase 所有的字母都大写
lowercase 所有的字母都小写
- text-decoration 设置文本的修饰
可选值:
underline 为文本添加下划线
line-through 为文本添加删除线
- letter-spacing 指定字符间距
- word-spacing 指定单词之间的距离
- text-align 设置文本的对齐方式
left ,默认值,文本靠左对齐
right , 文本靠右对齐
center , 文本居中对齐
justify , 两端对齐
- text-indent 用来设置首行缩进
这个值一般都会使用em作为单位,比如
text-indent:2em
为它指定一个负值,可以将一些不想显示的文字隐藏起来
overflow
通过overflow可以设置父元素如何处理溢出内容:
* 可选值:
* visible,默认值,不会对溢出内容做处理,元素会在父元素以外的位置显示
* hidden, 溢出的内容,会被修剪,不会显示
* scroll, 会为父元素添加滚动条,通过拖动滚动条来查看完整内容
* - 该属性不论内容是否溢出,都会添加水平和垂直双方向的滚动条
* auto,会根据需求自动添加滚动条,
* 需要水平就添加水平
* 需要垂直就添加垂直
* 都不需要就都不加
百分比参照于谁
子元素 width left margin padding 属性值的百分比是相对于:父级元素的width
子元素 height top 属性值的百分比是相对于: 父级元素的height
禁止系统默认滚动条
html{
overflow: hidden;
}
浮动
1. 脱离文档流
2. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
3. 浮动元素会生成一 个块级框,而不论它本身是何种元素。
4. 浮动元素支持设置宽高,如果不设置宽高,将由内容决定
缺点
会导致父元素的高度失效,值为0,后面的元素识别不了它的高度,就会往前占领它的位置
让元素消失在视野中
display: none 让元素消失
fontsize:0 字体大小为0
width:0; overflow:hidden; 宽度为0 而且溢出隐藏
height:0; overflow:hidden 高度为0 而且溢出隐藏
lineheight:0; overflow:hidden 行高为0 而且溢出隐 藏
visibility: hidden; 可见性的元素隐藏消失
opacity: 0; 透明度为0
color / background: transparent 字体颜色或者背景 颜色为透明
text-indent: 9999px; 首段缩进足够大的负值
position: absolute; left/top/bottom/right :9999px; 定位 + 方位的足够大的负值
margintop/bottom/left/right: 9999px; 的四个方位的 足够大的负值
transform: translateX(9999px) / translateY(9999px); 位移坐标值足够大的负值
transform: scale(0); 缩放比为0
backface-visibility
backface-visibility 属性定义当元素背面向屏幕时是否可见。
如果在旋转元素不希望看到其背面时,该属性很有用。
backface-visibility: visible | hidden;
rotateY()
rotateY(45deg): 直观上顺时针45deg(右手定则:四个手指直线Y轴原点)
object-fit 和 object-position
object-position 和 object-fit 只对替换元素生效
object-fit
属性指定替换元素的内容如何适应到具有宽高的元素框中
object-fit 类似于背景中的 background-size 属性
可选值
contain
cover
fill 默认值,如果对象的宽高比与内容框不相匹配,那么该对象将被拉伸以适应内容框。
none 被替换的内容将保持其原有的尺寸。
scale-down 与 none 或 contain 中的一个相同,取决于它们两个之间谁得到的对象尺寸会更小一些。
object-position
属性指定替换元素的内容在元素框内的对齐方式
类似 background-position
scroll-snap-type 和 scroll-snap-align
作用:优化滚动
一个横向可滚动容器,每次滚动之后,如果希望子元素最终的停留位置不是尴尬的被分割,而是完整的呈现在容器内,可以这样写:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
ul {
scroll-snap-type: x mandatory;
}
li {
scroll-snap-align: center;
}
详情可以看张鑫旭的这篇博客:CSS Scroll Snap简介
或者这篇:使用 sroll-snap-type 优化滚动