css复习2

盒子模型

案例:新浪导航案例-padding影响盒子好处

 <div class="nav">
        <a href="#">设为首页</a>
        <a href="#">手机新浪网</a>
        <a href="#">移动客户端</a>
        <a href="#">博客</a>
        <a href="#">微博</a>
        <a href="#">关注我</a>
    </div>
  <style>
        .nav {
            border-top: 3px solid #ff8500;
            border-bottom: 1px solid #edeef0;
            background-color: #fcfcfc;
            line-height: 41px;
        }
        
        .nav a {
            display: inline-block;
            height: 41px;
            text-decoration: none;
            color: #4c4c4c;
            padding: 0 20px;
            font-size: 12px;
        }
        
        .nav a:hover {
            background-color: #eee;
            color: orange;
        }
    </style>

请添加图片描述
注:
外边距可以让块级盒子水平居中,但是必须满足两个条件:
① 盒子必须指定了宽度(width)。
② 盒子左右的外边距都设置为 auto 。
常见的写法,以下三种都可以:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。

使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并
主要有两种情况:
1.相邻块元素垂直外边距的合并
2.嵌套块元素垂直外边距的塌陷

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。
在这里插入图片描述
解决方案:尽量只给一个盒子添加 margin 值。

嵌套块元素垂直外边距的塌陷:
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
举例:

<div class="father">
        <div class="son"></div>
    </div>
  .father {
            width: 500px;
            height: 500px;
            background-color: red;
            margin-top: 50px;
        }
        
        .son {
            width: 200px;
            height: 200px;
            background-color: green;
        }

最终的效果如下:
在这里插入图片描述
现在我们想要的效果是子盒子距离父盒子100px,也就是如下效果:
在这里插入图片描述
我们给子盒子添加margin-top属性

得到的结果是:
在这里插入图片描述
子盒子不仅没有下来,父盒子反而和子盒子一起下来了。我们称这种现象为父元素的塌陷问题

对于两个嵌套关系(父子关系)的块元素,父元素上有外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
解决方案为:
①可以为父元素定义上边框。
②可以为父元素定义上内边距。
③可以为父元素添加 overflow:hidden

清除内外边距:
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。

* {
padding:0; /* 清除内边距 */
margin:0; /* 清除外边距 */
}

圆角边框:
border-radius 属性用于设置元素的外边框圆角。
语法:

border-radius:length;

CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。
在这里插入图片描述
在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。

text-shadow: h-shadow v-shadow blur color;

在这里插入图片描述

浮动

提问:我们用标准流能很方便的实现如下效果吗?
1.如何让多个块级盒子(div)水平排列成一行?
我们之前用到了块级元素转化为行内块元素

 <div>1</div>
    <div>2</div>
    <div>3</div>
  div {
            display: inline-block;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

在这里插入图片描述
我们可以看到虽然转换为行内块元素可以实现一行显示,但是他们之间会有大的空白缝隙,很难控制。

为什么需要浮动?
答:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式.
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。

浮动元素特性:
1.浮动元素会脱离标准流(脱标)
2.浮动的元素会一行内显示并且元素顶部对齐
3.浮动的元素会具有行内块元素的特性.(如果行内元素有了浮动,则不需要转化为块级元素/行内块元素就可以直接给高度和宽度)

设置了浮动(float)的元素最重要特性:
1.脱离标准普通流的控制(浮) 移动到指定位置(动), (俗称脱标)
2.浮动的盒子不再保留原先的位置

如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。
注意: 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐。
先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧

任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性。

  • 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
  • 浮动的盒子中间是没有缝隙的,是紧挨着一起的
  • 行内元素同理

浮动布局注意点

  1. 浮动和标准流的父盒子搭配。
    先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置
  2. 一个元素浮动了,理论上其余的兄弟元素也要浮动。
    一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
    浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.

清除浮动

定位

为什么需要定位?
某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子.以及当我们滚动窗口的时候,盒子是固定屏幕某个位置的。这写场景标准流或浮动都无法快速实现,所以需要定位来实现。
1.浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。
2.定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。

定位:将盒子定在某一个位置,所以定位也是在摆放盒子, 按照定位的方式移动盒子。
定位 = 定位模式 + 边偏移 。
定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置。

在这里插入图片描述
相对定位的特点:
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)。
原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)。
绝对定位的特点:(务必记住)
1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document 文档)。
2.如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
3.绝对定位不再占有原先的位置。(脱标)
所以绝对定位是脱离标准流的。

子绝父相的由来
①子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
②父盒子需要加定位限制子盒子在父盒子内显示。
③父盒子布局时,需要占有位置,因此父亲只能是相对定位。
这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级。
总结: 因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位
当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到。

固定定位是元素固定于浏览器可视区的位置。主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。

固定定位的特点:(务必记住)
1.以浏览器的可视窗口为参照点移动元素。

  • 跟父元素没有任何关系
  • 不随滚动条滚动。

2.固定定位不在占有原先的位置。
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。

固定定位小技巧: 固定在版心右侧位置
小算法:
1.让固定定位的盒子 left: 50%. 走到浏览器可视区(也可以看做版心) 的一半位置。
2.让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走 版心宽度的一半位置
就可以让固定定位的盒子贴着版心右侧对齐了

粘性定位可以被认为是相对定位和固定定位的混合。 Sticky 粘性的
粘性定位的特点:
1.以浏览器的可视窗口为参照点移动元素(固定定位特点)
2.粘性定位占有原先的位置(相对定位特点)
3.必须添加 top 、left、right、bottom 其中一个才有效
跟页面滚动搭配使用。 兼容性较差,IE 不支持。

总结:
在这里插入图片描述
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)

  • 数值可以是正整数、负整数或 0, 默认是 auto,数值越大,盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来居上
  • 数字后面不能加单位
  • 只有定位的盒子才有 z-index 属性

绝对定位的盒子水平居中

定位特殊特性
绝对定位和固定定位也和浮动类似。
1.行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
2.块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。

脱标的盒子不会触发外边距塌陷
浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。

绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字

 <div class="box"></div>
    <p>键盘敲烂,月薪过万,好好学习,天天上网</p>
.box {
            float: left;
            width: 150px;
            height: 150px;
            background-color: pink;
        }

在这里插入图片描述

但是绝对定位(固定定位) 会压住下面标准流所有的内容。

 <div class="box"></div>
    <p>键盘敲烂,月薪过万,好好学习,天天上网</p>
 .box {
            position: absolute;
            width: 150px;
            height: 150px;
            background-color: pink;
        }

在这里插入图片描述

浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵有千堆雪与长街

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值