WEB前端学习:CSS学习_CSS布局

14 篇文章 0 订阅
9 篇文章 0 订阅

CSS布局

该篇讲的是CSS布局,主要用于确定CSS盒子的位置

一、display

display: block;
意义
none元素被清除,相当于不存在常用于隐藏元素
inline元素被转换为内联元素它就像简单的文本一样
block元素将转换为块元素,它从新行开始,并独占一行,可以设置宽高
inline-block元素共享内联元素和块元素的属性,默认不独占一行,可以像文本一样,同时可以设置宽高
flex该元素将转换为弹性框容器,其子元素将转换为弹性框项目,就其本身来说,相当一个块元素,独占一行,但其子元素可以在同一行内
inline-flex该元素共享内联元素和Flexbox元素的属性,默认不独占一行,其他和 flex 一样
grid将元素转化位一个网格容器,其子元素将转化为网格项,就其本身来说,相当于一个块元素,其子元素各占一部分
inline-grid元素共享内联元素和网格元素的属性,默认不独占一行,其他的与 grid 一样

二、标准

标准普通流,就是文档元素按正常的顺序进行排列,从上至下,从左至右

三、浮动

float
float 属性最初只用于在成块的文本内浮动图像,但是现在它已成为在网页上创建多列布局的最常用工具之一
可以使多个在块级元素同一行显示

作用
none默认值,没有效果
left在块容器中左浮动
right在块容器中右浮动
inline-start在块容器中开始一侧浮动
inline-end在块容器中结束一侧浮动

tips:使用浮动布局的时候,需要创建一个标准文档流的父容器将浮动元素包裹,以免影响后面的布局

四、多列浮动布局

1. 两列布局

<!--html-->
<body>
    <div>
    <h3>观沧海</h3>
        <p>[魏晋] 曹操</p>
        <p>东临碣石,以观沧海。</p>
        <p>水何澹澹,山岛竦峙。</p>
        <p>树木丛生,百草丰茂。</p>
        <p>秋风萧瑟,洪波涌起。</p>
        <p>日月之行,若出其中;</p>
        <p>星汉灿烂,若出其里。</p>
        <p>幸甚至哉,歌以咏志。</p>
    </div>

    <div>
        <h3>龟虽寿</h3>
        <p>[魏晋] 曹操</p>
        <p>神龟虽寿,犹有竟时。</p>
        <p>腾蛇乘雾,终为土灰。</p>
        <p>老骥伏枥,志在千里。</p>
        <p>烈士暮年,壮心不已。</p>
        <p>盈缩之期,不但在天;</p>
        <p>养怡之福,可得永年。</p>
        <p>幸甚至哉,歌以咏志。</p>
    </div>
</body>
/*css*/
body {
    width: 95%;
    max-width: 1000px;
    margin: 0 auto;
}

div:nth-of-type(1) {
    width: 43%;
    float: left;
}

div:nth-of-type(2) {
    width: 43%;
    float: right;
}

h3, p {
    text-align: center;
}

在CSS代码中,设置最大宽度1000像素,在没达到1000像素之前,视图的宽度为总宽度的95%,达到1000像素后,视图将保持这个宽度居中显示。
在CSS代码中,同时为两个 div元素设置宽度为其父元素的43%,总共86%,留下14%作为空隙

PC端

效果图(Chrome浏览器)
float_pc

手机端

效果图(Chrome浏览器)
float_mobile

需要注意的一点是,当窗口宽度过窄时,可能会造成展示内容不美观,可以选择为宽度设置固定大小,这就是固定宽度布局

2. 三列布局

与二列布局,类似,但需要注意的是中间那一列
假设分别设置三个 div元素,一个 div元素代表一列。
如果 div2 设置的是 float: right 那么显示的是
div1 div3 div2
如果 div2 设置的是 float: left 那么显示的是
div1 div2 div3
因为 div2 的优先级大于 div3的优先级

3.浮动元素的特性

浮动的元素存在于正常的文档布局流之外。可以理解为浮起来了,文档流是在地上,浮动流是在天上

  • 他们在父元素中所占的面积的有效高度为0
  • 非浮动元素的外边距不会影响到浮动元素

五、清除浮动

clear

作用
left清除左浮动
right清除右浮动
both清除左浮动和右浮动
<!-- html -->
<body>
    <div class="div">
        <p class="p1"></p>
        <p class="p2"></p>
        <p class="p3"></p>
    </div>
</body>
/* css */
p{
    margin: 0;
}

.div {
    width: 1000px;
    background: gray;
}

.p1 {
    width: 100px;
    height: 200px;
    background: red;
}

.p2 {
    width: 200px;
    height: 100px;
    background: blue;
}

.p3 {
    width: 200px;
    height: 200px;
    background: green;
}

效果图(Chrome浏览器)
在这里插入图片描述

在没有设置浮动的情况下,div容器 中的三个 p元素按照默认顺序垂直排列在一起,div容器没有设置高度,但 div容器包含子元素,它的高度默认等于其子元素的高度之和

当 p1 设置了左浮动

效果图(Chrome浏览器)
在这里插入图片描述

p1 的位置虽然未变,但 p2 和 p3 上去了,并且 p1 和 p2,p3重叠,这是因为浮动元素的特性导致的
相当于 p1 漂浮起来了
而 clear属性就是为了清除浮动所带来的影响

解决方法

  • 在浮动元素后面添加一个空盒子,给这个空盒子设置 clear属性
<div style="clear: both"></div>
  • 给包裹浮动元素的父容器添加 overflow: hidden

  • 双伪元素清除。为包裹浮动元素的父容器添加类 clearfix

.clearfix:before,
.clearfix:after {
    content: "";
    display: table;
}
.clearfix:after {
    clear: both;
}
/*IE6,7的清除浮动方式*/
.clearfix {
    *zoom: 1;
}

六、定位

position

定位属性主要分为两部分:边偏移和定位模式
tips:元素添加了绝对定位或固定定位之后,会转化为行内块元素

1. 边偏移

外边距边界和内容边界的距离

属性名含义
top定位元素的上外边距边界和它包含的元素的上边界的距离
bottom定位元素的下外边距边界和它包含的元素的下边界的距离
left定位元素的左外边距边界和它包含的元素的左边界的距离
right定位元素的右外边距边界和它包含的元素的右边界的距离

2. 定位模式

2.1、静态定位 static

默认的定位方式。也就是文档标准流的布局方式
tips:设置该定位方式,边偏移无效,用于消除其他定位

2.2、相对定位 relative

以没有设置定位时的位置为参考,在不改变页面布局的前提下移动元素位置
tips:原来的空间依旧存在,就会造成原来所在的位置会留下空白

2.3、绝对定位 absolute

元素会被移出正常文档流,并不为元素预留空间(可以参考float)
以设置了非 static 定位的父元素为参考,进行移动
如果没有设置非 static 定位的父元素,则以浏览器为参考进行移动
tips:绝对定位的元素可以设置外边距(margins),且不会与其他边距合并

tips:常用子绝父相

2.4、绝对定位垂直水平居中

绝对定位使用 margin: 0 auto 水平居中的方法是无效的
但可以使用偏移的方法使绝对定位居中
设置偏移等于父元素宽度一半减去子元素宽度的一半

.father {
    width: 400px;
    height: 400px;
    background: pink;
    margin: 100px auto;
    position: relative;
}

.son {
    width: 200px;
    height: 200px;
    background: brown;
    position: absolute;
    /* 400/2 - 200/2 */
    left: 100px;
    top: 100px;
}

效果图(Chrome浏览器)
position_center

2.5、固定定位 fixed

元素会被移出正常文档流,并不为元素预留空间
而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置
元素的位置在屏幕滚动时不会改变
tips:固定定位,如果元素中没有内容,一定要设置宽高

2.6、重叠

z-index

当元素之间重叠的时候, z-index 较大的元素会覆盖较小的元素,在上层进行显示
当定位元素相互重叠时,可以设置更大的 z-index ,使其在其他元素上层显示
tips:只有非 static 定位元素才有该属性
tips:默认是 0,取值可以是正数,负数和 0,不能加单位

七、常见布局

1. 版心

网页的主体内容所在的区域,一般在浏览器中水平居中显示,通常为 960px,980px,1000px,1200px

2. 两列左窄右宽型

效果图(Chrome浏览器)
两列左窄右宽型

<!-- html -->
<div class="header"></div>
<div class="banner"></div>
<div class="content">
    <div class="left"></div>
    <div class="right"></div>
</div>
<div class="footer"></div>
/* css */
.header,
.banner,
.content,
.footer {
    width: 1000px;
    margin: 10px auto;
}

.header {
    height: 120px;
    background: blue;
    margin-top: 0;
}

.banner {
    height: 100px;
    background: red;
}

.content {
    height: 400px;
    background: yellow;
}

.left,
.right {
    height: 100%;
}

.left {
    width: 39%;
    background: #ccc;
    float: left;
}

.right {
    width: 59%;
    background: #333;
    float: right;
}

.footer {
    height: 120px;
    background: green;
    margin-bottom: 0;
}

3. 通栏平均分布型

效果图(Chrome浏览器)
通栏平均分布型

<!-- html -->
<div class="header"></div>
<div class="banner"></div>
<div class="content">
    <div class="content_top">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <div class="content_bottom">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
     </div>
</div>
<div class="footer"></div>
/* css */
li {
    list-style: none;
}

.header,
.footer {
    width: 100%;
    height: 120px;
}

.header,
.banner,
.content,
.footer {
    margin: 10px auto;
}

.header {
    background: blue;
    margin-top: 0;
}

.footer {
    background: red;
    margin-bottom: 0;
}

.banner,
.content {
    width: 960px;
}

.banner {
    height: 180px;
    background: green;
}

.content {
    height: 410px;
    background: gray;
}

.content .content_top {
    height: 175px;
    /* background: brown; */
    margin-bottom: 20px;
}

.content .content_bottom {
    height: 215px;
    /* background: coral; */
}

.content_top ul li {
    height: 170px;
    width: 231px;
    margin-left: 12px;
    background: #ccc;
    float: left;
}

.content_top li:first-child {
    margin-left: 0;
}

.content_bottom ul li {
    height: 210px;
    width: 231px;
    margin-top: 5px;
    margin-left: 12px;
    background: #ccc;
    float: left;
}

.content_bottom li:first-child {
    margin-left: 0;
}

持续更新…

该篇主要讲的是CSS布局。

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言。

往期博客

下面这些是我学习CSS的网站,希望对大家有帮助

  • CSS Reference(https://cssreference.io/)
  • MDN(https://developer.mozilla.org/zh-CN/docs/Web/CSS)
  • 菜鸟教程(https://www.runoob.com/css/css-tutorial.html)
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值