1 父元素相对定位,子元素绝对定位(子绝父相)的前提下,子元素宽高若设为百分比,是相对父元素的content + padding的值
, 注意不含border
如果子元素不是绝对定位,那宽高设为百分比是相对于父元素的宽高
,标准盒模型下是content(IE盒模型是content+padding+border。)
2 两栏布局问题:需求是左边固定,右边自适应
下面介绍常用的两种方式:
// 利用绝对定位,让左侧div,成为BFC
左列定宽右列自适应
// css
#parent{position: relative; /*子绝父相*/
}
#left {position: absolute;top: 0;left: 0;width: 100px;height: 500px;
}
#right {marin-left:100px;width:calc(100%-100px);height: 500px;
}
左列定宽右列自适应
// css
#parent{width: 100%;height: 500px;display: flex;
}
#left {width: 100px;
}
#right {flex: 1; /*均分了父元素剩余空间*/
}
// 利用绝对定位
1.父元素使用相对定位
2.两侧子元素使用绝对定位
3.中间元素不做定位处理,只留出空间就好LeftMainRight
// css
body,html,.container{height: 100%;padding: 0;margin: 0;overflow: hidden;
}.left,.right{position: absolute;height:100%;top: 0;
}.left{left: 0;width: 200px;
}.right{right: 0;width: 200px;
}.main{height:100%;margin: 0 200px;
}
LeftMainRight
// css
.container{display: flex;
}.left{width:200px;
}.main{flex: 1;/*均分了父元素剩余空间*/
}.right{width:200px;
}
常见的块级
元素:div、h1-h6、address、p等等。
常见的内联
元素:span、strong等等。
// 第一种做法是:直接在父级元素设置flex。通过设置父级的flex,让子级元素水平垂直居中。
.parent {display: flex;justify-content: center;align-items: center;
}// 第二种做法:父元素dispaly:flex;子元素margin:auto;
.parent {display: flex;
}
.child{margin:auto;
}// 第三种做法:transform + absolute + relative
.parent {position: relative;
}
.child {position: absolute;top: 50%; left: 50%;transform: translate(-50%, -50%);
}
display:none: 会让元素完全从渲染树中消失
,渲染的时候不占据任何空间
, 不能点击。
visibility: hidden:不会让元素从渲染树消失
,渲染元素继续占据空间
,只是内容不可见,不能点击
opacity: 0: 不会让元素从渲染树消失
,渲染元素继续占据空间
,只是内容不可见,可以点击
继承方面:
性能方面:
回流
,读屏器不会读取display: none元素内容,性能消耗较大
重绘
,性能消耗较少读屏器读取visibility: hidden元素内容,性能消耗较一般
重绘
,性能消耗较少
max-width(最大宽度属性):用来定义宽度显示的最大值
min-width(最小宽度属性):用来定义宽度显示的最小值
//宽为100px
//宽度为400px
.max-width img{...}{ max-width:300px;}
.min-width img{...}{ min-width:300px} “min-width”里的img图片最小宽度为300px,而实际图片只有100px ,所以图片被拉伸到300px;
“max-width”里的img图片最大宽度为300px,而实际图片宽度是400px ,所以图片被缩小到300px;
如何修改才能让图片宽度为 300px?
方法一:
max-width:300px;覆盖其样式;
方法二:
transform: scale(0.625);按比例缩放图片;