css3布局

1. 盒子模型

(1)border:边框,border-width边框粗细,单位px;border-style边框样式,none默认值,没有边框即忽略所有边框的宽度,solid单实线(常用),dashed虚线,dotted点线,double双实线;border-color边框颜色。

也可以单独设置上top、下bottom、左left、右right的边框,例如border-top-width。还可以综合设置样式,border-top,border-bottom,border-left,border-right,border:宽度  样式  颜色。

border-collapse:collapse;表示将相邻的边框合并在一起。

border-radius:圆角边框(css3),可以设置1~4个值,可以是单位为px的数值,也可以是百分数,依次设置左上角、右上角、右下角、左下角的radius。

(2)padding:padding-top  padding-right  padding-bottom  padding-left,盒子内边距,可以设置1~4个值,数值单位为px,设置为0即可清除内边距。

(3)margin:margin-top  margin-right  margin-bottom  margin-left,外边距,在元素之间创建“空白”,可以设置1~4个值,数值单位为px,当给左右的外边距都设置为auto时,可以使带有宽度的块级元素水平居中,设置为0即可清除外边距。

行内元素只有左右外边距,没有上下外边距;相邻块元素垂直外边距的合并(也称外边距塌陷),垂直间距取两者之间的较大值;对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者,即使父元素的上外边距为0,也会发生合并,可以为父元素定义1px的上边框或上内边距,也可以为父元素添加overflow:hidden来解决这个问题。

(4)content宽度和高度:外盒尺寸即元素空间尺寸计算,element空间高度 | 宽度 = content height | width + padding + border + margin;内盒尺寸即元素实际大小计算,element空间Height | Width = content height | width + padding + border;其中height和width通过属性值设置。

宽度属性width和高度属性height仅适用于块级元素,对行内元素无效;计算盒子模型的总高度时,还应考虑上下两个盒子垂直外边距合并的情况;如果一个盒子没有给定宽度/高度或者继承父亲的宽度/高度,则padding不会影响本盒子的大小。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        * {
            margin: 0;/*情况默认内外边距*/
            padding: 0;
        }
        ul {
            list-style: none;/*取消列表自带的小点*/
        }
        .searchPic {
            width: 238px;
            height: 294px;
            border: 1px solid #D9E0EE;
            border-top: 3px solid #FF8400;/*位于border之后*/
            margin: 100px;
        }
        .searchPic h3 {
            height: 35px;
            line-height: 35px;/*垂直居中*/
            border-bottom: 1px solid #D9E0EE;
            font-weight: normal;/*粗体不加粗*/
            font-size: 16px;
            padding-left: 12px;/*继承父亲宽度*/
        }
        .searchPic img {
            margin: 7px 0 0 8px;
        }
        .searchPic ul li a {
            font-size: 12px;
            color: #666;
            text-decoration: none;/*取消下划线*/
        }
        .searchPic ul {
            margin-left: 8px;
        }
        .searchPic ul li {
            padding-left: 10px;
            height: 26px;
            line-height: 26px;
            background: url(images/square.png) no-repeat left center;
        }
        .searchPic ul li a:hover {
            text-decoration: underline;
            color: #FF8400;
        }
    </style>
</head>
<body>
    <div class="searchPic">
        <h3>搜索趣图</h3>
        <img src="images/img01.jpg" width="218">
        <ul>
            <li><a href="#">这是链接1</a></li>
            <li><a href="#">这是链接2</a></li>
            <li><a href="#">这是链接3</a></li>
        </ul>
    </div>
</body>
</html>

(5)box-sizing(css3):指定盒模型,取值为content-box时,盒子大小为width + padding + border;取值为border-box时,盒子大小为width,即padding和border是包含到width里面的。

(6)box-shadow:水平位置h-shadow  垂直位置v-shadow  模糊距离blur  阴影尺寸spread  阴影颜色color  内外阴影inset,默认是outset,不需要设置,例如box-shadow:0  15px  30px  rgba(0,0,0,0.4);省略阴影尺寸。

2. css定位机制

(1)普通流 / 标准流 / 文档流:网页内标签元素正常从上到下、从左到右排列,块级元素独占一行,行内元素按顺序依次前后排列。

(2)float浮动:元素的浮动是指设置了浮动属性的元素会脱离标准普通流的控制,移动到其父元素中指定位置的过程,此时元素具有行内块元素的特性,浮动的目的是为了让多个块级元素在同一行上显示,取值有left、right、none三种,浮动首先创建包含块(即父级元素),浮动的元素总是找离它最近的父级元素对齐,但是不会超过内边距的范围。一个父盒子里面的子盒子,如果其中一个子级有浮动的,则其它子级都需要浮动,这样才能一行对齐显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        div:first-child {
            background-color: pink;
            width: 200px;
            height: 200px;
            float: left;
        }
        div:last-child {
            background-color: red;
            width: 300px;
            height: 300px;
            float: left;
        }
        /*注意两个div是否设置了float:left的区别*/
    </style>
</head>
<body>
    <section>
        <div></div>
        <div></div>
    </section>
</body>
</html>

当父元素没有设置高度,父元素高度默认为0,子元素设置了浮动时,后面的元素会上浮占据原来的位置,清除浮动即把浮动的盒子圈到里面,让父盒子闭合出口和入口不让它们出来影响其它元素,以下有几种方法用来清除浮动造成的影响。

① 额外标签法:在浮动元素末尾添加一个空的标签例如<div style="clear:both"></div>,clear还可以取值left,right,但不常用,此方法通俗易懂,书写方便,但是会添加许多无意义的标签,结构化较差。

② 给父级元素添加overflow属性:添加overflow:hidden | auto | scroll;都可以实现,代码简介,但内容增多时容易造成不会自动换行导致内容被隐藏,无法显示需要溢出的元素。

③ 使用after伪元素清除浮动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .clearfix:after {
            content: ".";/*内容为小点,尽量不为空,否则旧版本浏览器有空隙*/
            display: block;/*转换为块级元素*/
            height: 0;/*高度为0*/
            visibility: hidden;/*隐藏盒子*/
            clear: both;/*清除浮动*/
        }
        .clearfix {/*ie6、7浏览器的处理方式*/
            *zoom: 1;
            /** 代表ie6、7能识别的特殊符号,带有*的属性,只有ie6、7才执行
            zoom是ie6、7清除浮动的方法*/
        }
        div:first-child {
            background-color: pink;
            width: 200px;
            height: 200px;
            float: left;
        }
        div:last-child {
            background-color: red;
            width: 300px;
            height: 300px;
            float: left;
        }
        section:last-child {
            height: 400px;
            background-color: green;
        }
    </style>
</head>
<body>
    <section class="clearfix"><!-- 父元素盒子不设置高度 -->
        <div></div>
        <div></div>
    </section>
    <section></section>
</body>
</html>

④使用before和after双伪元素清除浮动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .clearfix:before,.clearfix:after {
            content: "";
            display: table;/*触发BFC清除浮动*/
        }
        .clearfix:after {
            clear: both;
        }
        .clearfix {
            *zoom: 1;
        }
        div:first-child {
            background-color: pink;
            width: 200px;
            height: 200px;
            float: left;
        }
        div:last-child {
            background-color: red;
            width: 300px;
            height: 300px;
            float: left;
        }
        /*注意两个div是否设置了float:left的区别*/
        section:last-child {
            height: 400px;
            background-color: green;
        }
    </style>
</head>
<body>
    <section class="clearfix"><!-- 父元素盒子不设置高度 -->
        <div></div>
        <div></div>
    </section>
    <section></section>
</body>
</html>

(3)定位:元素的定位属性主要包括定位模式和边偏移两部分。

① 边偏移:top,bottom,left,right。

② 定位模式:选择器{position:属性值;},属性值常见取值有static、relative、absolute、fixed四种。

A. 静态定位static:所有元素的默认定位方式,即标准流的特性,此状态下无法通过边偏移属性(top、bottom、left、right)来改变元素的位置,一般用来消除其它定位方式的影响。

B. 相对定位relative:通过边偏移移动位置,但是原来所占的位置继续占有;每次移动的位置,都是以自己的左上角为基点移动;仍在标准流中,后面的盒子仍以标准流方式对待它;其主要价值就是移动位置,让盒子到我们想要的位置上去。

C. 绝对定位absolute:可以通过边偏移移动位置,但是完全脱标,不占位置;如果文档可滚动,绝对定位元素会随着它滚动,因为元素最终会相对于正常流的某一部分定位;若所有父元素都没有定位,则以浏览器为基准对齐;若父级元素有定位,则将元素依据最近的已经定位(absolute、relative或fixed)的父元素进行定位。

子绝父相:子级元素是绝对定位时,父级元素要用相对定位。

绝对定位的盒子水平/垂直居中:此时普通盒子左右margin为auto无效,须设置left:50%或者top:50%,即父盒子的一半大小,然后外边距margin-lef或margin-topt负的自己盒子宽度/高度的一半即可。

D. 固定定位fixed:当对元素设置固定定位后(需设置宽度和高度,或者有内容撑开),它将脱离标准文档流的控制,和父元素没有任何关系,不占位置,始终依据浏览器窗口来定义自己的显示位置,不管浏览器滚动条如何滚动也不管浏览器窗口的大小如何变化,该元素都会始终显示在浏览器窗口的固定位置。

z-index:用来调整重叠定位元素的堆叠顺序,其取值可为正整数、负整数和0,没有单位,默认值为0,取值越大,定位元素在层叠元素中越居上;如果取值相同,则根据书写顺序后来居上;只有当position设置为relative、absolute、fixed有此属性,其余标准流、浮动、静态定位均无此属性。

元素添加了绝对定位和固定定位之后,与浮动一样,元素模式会转换为行内块模式(行内元素和块元素均如此),因此不需添加display:block。

定位模式

是否脱标占有位置

是否可以使用边偏移

移动位置基准

静态static

不脱标,正常模式

不可以

正常模式

相对定位relative

不脱标,占有位置

可以

相对于自身位置移动(自恋性)

绝对定位absolute

完全脱标,不占有位置

可以

相对于定位的父级元素移动位置(拼爹型)

固定定位fixed

完全脱标,不占有位置

可以

相对于浏览器移动位置

3. 布局

(1)网页布局流程:确定页面的版心(可视区,网页中主体内容所在的区域,一般在浏览器窗口中水平居中显示,常见的宽度值为960px、980px、1000px、1200px),分析页面中的行模块,以及每个行模块中的列模块,制作html结构,css初始化,运用盒子模型,通过div + css布局来控制网页的各个模块。

(2)伸缩布局(css3)

父级元素设置display:flex;子元素设置flex:num;num表示所占份数,瓜分父元素,也可以直接指定像素值,不指定flex属性则不参与伸缩分配。

① flex-direction:主轴(flex容器的主轴主要用来配置flex项目,默认是水平方向)、侧轴(与主轴垂直,默认是垂直方向)、方向(默认主轴从左到右,侧轴从上到下,可以通过flex-direction:row | column | row-reverse | column-reverse;改变)。

② min-width和max-width:可以限制最小/大宽度。

③ justify-content:调整主轴对齐(水平),取值有5种,flex-start让子元素从父容器的开头开始紧挨着排序但是盒子顺序不变,flex-end让子元素从父容器的后面开始紧挨着排序但是盒子顺序不变,center让子元素在父容器中间紧挨着显示,space-between左右的盒子贴近父盒子,中间的平均分布空白边距,space-around各个子元素前后都有空白间距。

④ align-items:调整侧轴对齐(一行垂直),stretch让子元素的高度拉伸适用父容器(子元素不给高度的前提下),center垂直居中,flex-start以父元素顶部为基准垂直对齐,即上对齐,flex-end以父元素底部为基准垂直对齐,即下对齐。

⑤ flex-wrap:当子盒子中宽度多于父盒子的时候控制是否换行,取值有3种,nowrap默认值(常用),规定不换行或不拆列,即收缩(压缩)强制一行内显示,wrap必要时拆行或拆列,wrap-reverse必要时拆行或拆列,但是以相反的顺序。

⑥ align-content:针对flex容器多行的情况,必须对父元素设置display:flex;排列方式flex-direction:row;并设置换行flex-wrap:wrap才会起作用,取值有6种,stretch,center,flex-start,flex-end,space-between,space-around。

⑦ flex-flow:flex-direction  flex-wrap的合并简写方式。

⑧ order:num;控制子元素的排列顺序,正序方式排列,从小到大,数值小的排在前面,可以为负值,默认值为0。

4. BFC(块级格式化上下文)

(1)概念:独立的渲染区域,只有块级元素参与,规定了内部的块级元素如何布局,并且与这个区域外部毫不相干,这个区域有宽度和高度、外边距margin、内边距padding、边框border,不是所有元素模式都能产生BFC,display属性为block、list-item、table的元素会产生BFC。

(2)触发BFC的条件:① float属性不为none;② position为absolute或fixed;③ display为inline-block、table-cell、table-caption、flex、inline-flex;④ overflow不为visible。

(3)BFC元素所具有的特性:① 在BFC中,盒子从顶端开始垂直地一个接一个地排列;② 盒子垂直方向的距离由margin决定,属于同一个BFC的两个相邻盒子的margin会发生重叠;③ BFC中,每一个盒子的左外边缘margin-left会触碰到容器的左边缘border-left;④ BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘;⑤ 计算BFC的高度时,自然也会检测浮动的盒子高度。

(4)BFC的主要用途

① 清楚元素内部浮动:常见的在父元素上设置overflow:hidden;防止子元素浮动而使得父元素高度为0。

② 解决外边距合并问题:盒子垂直方向的距离由margin决定,属于同一个BFC的两个垂直相邻的盒子,上面盒子的margin-bottom和下面盒子的margin-top会合并,取两者中较大值,解决方法可用一个盒子包裹其中一个盒子,并设置overflow:hidden。

③ 制作右侧自适应的盒子:BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘,普通流体元素(例如含文字的div)BFC后,为了和浮动元素不产生任何交集,顺着浮动边缘形成自己的封闭上下文。

发布了7 篇原创文章 · 获赞 5 · 访问量 631

猜你喜欢

转载自blog.csdn.net/weixin_39477501/article/details/104430160