CSS-盒子模型

  • 所有的页面元素都可以看成一个盒子,并且占据着一定的页面空间。无论是div、span、还是a都是盒子,但是,图片、表单元素一律看作是文本,它们并不是盒子。比如说,一张图片里并不能放东西,它自己就是自己的内容;
  • 盒子模型是由content(内容)、 padding(内边距)、 margin(外边距)、 border(边框)这四个属性组成的。

盒模型就是指CSS布局中的每一个元素,在浏览器的解释中,都被当做一个盒装物。对我们来说,只需要理解元素在页面中所占据的位置。

border边框

  • 复合样式:border:边框大小 类型 颜色;
border:5px solid #006633;
border-width: 5px;      大小
border-style: solid;    类型
border-color: red;      颜色
border-top:0px;       /*去除上边框*/
border-top:none;      /*去除上边框*/
  • border-width:边框大小
    • 四个值:上 右 下 左(顺时针)
    • 三个值:上 左右 下
    • 二个值:上下 左右
    • 一个值:四个方向值相等
    • border-top-width 顶部边框大小
    • border-right-width 右边框大小
    • border-bottom-width 底部边框大小
    • border-left-width 左边框大小
  • border-style: 边框类型
    • solid 实线
    • dashed 虚线
    • dotted 点线
    • double 双边框
    • border-top-style 顶部边框类型
    • border-right-style 右边框类型
    • border-bottom-style 底部边框类型
    • border-left-style 左边框类型
  • border-color 边框颜色
    • 四个值:上 右 下 左(顺时针)
    • 三个值:上 左右 下
    • 二个值:上下 左右
    • 一个值:四个方向颜色一样
    • border-top-color 顶部边框颜色
    • border-right-color 右边框颜色
    • border-bottom-color 底部边框颜色
    • border-left-color 左边框颜色

padding内边距

边框与内容之间的距离

  • 四个值:上 右 下 左(顺时针)
  • 三个值:上 左右 下
  • 二个值:上下 左右
  • 一个值:四个方向值相等
  • padding-top 顶部内边距
  • padding-right 右内边距
  • padding-bottom 底部内边距
  • padding-left 左内边距

margin外边距

元素与其他元素的距离(边框以外的距离)

  • margin-top 顶部外边距
  • margin-right 右外边距
  • margin-bottom 底部外边距
  • margin-left 左外边距
  • 自动水平居中
    • margin:auto; 左右居中
    • margin:20px auto; 上下20px 左右居中
    • margin:20px auto 0; 上20px 左右居中 下0

盒子大小的计算

  • content+border+padding盒子大小 = 样式宽 + 内边距 + 边框
  • 盒子宽度 = 左border+左padding+width+右padding +右border
  • 盒子高度 = 上border+上padding+height+下padding+下border

文档流

文档流是浏览器解析网页的一个重要概念,对于一个XHTML网页,body元素下的任意元素,根据其前后顺序,组成了一个个上下关系,这便是文档流。浏览器根据这些元素顺序去显示他们在网页中的位置。
文档流是浏览器默认显示规则

float浮动

浮动起初作用是为了让文字环绕效果。

  • 浮动的定义:使元素脱离文档流 ,按照指定(左右)方向发生移动,遇到父级边界或者相邻的浮动元素停了下来;
  • 文档流 是文档中可显示对象在排列时所占用的位置/空间(在页面中占位置);
  • 脱离文档流 :在页面内中不占位置,所以浮动元素后面的元素会占据浮动元素本来应该所处的位置。
  • 如果水平方向上没有足够的空间容纳浮动元素,则转向下一行
浮动的一般情况
  • float:left;
  • float:right;
  • none;

如果一个元素(无论是块级元素还是行内元素)被设置为float之后,那么它默认会添加属性display:inline-block(行内块级元素),也就是说浮动会让元素变为拥有块级属性的行内元素,这时它的默认宽度不是100%,且给该元素设置padding-top和padding-bottom或者width、height都是有效果的。

清除浮动
  • 什么情况下需要清除浮动?
    父元素没有高度(指的是不设值,height:0不算)的情况下,里面的子元素都设置了浮动。
    只要浮动在一个有高度的盒子中,那么这个浮动就不会影响后面的浮动元素。 但是一般,高度height很少出现。为什么?因为能被内容撑高!
  • 为什么需要清除浮动?
    当元素设置浮动属性后,会对相邻的元素产生影响。相邻元素是指紧邻后面的元素。
  • 清除浮动办法:
  1. overflow: hidden; 是将父元素解除浮动的影响,需要注意这个属性不仅能清除浮动,还有超出隐藏效果。
    给没有设置高度的父元素设置overflow:hidden,一个父亲不能被自己浮动的儿子,撑出高度。但是,只要给父亲加上overflow:hidden; 那么,父亲就能被儿子撑出高了。
# 时下主流,应该用在包含浮动元素的父元素上;
.clearfix:after{
              content:'';
              display:block;
              clear:both;
              height:0;  
           } 

css给块级元素设上display: inline与float:left的区别是什么?
设了float:left的元素允许它的右边存在任何元素同行显示,不论是内联元素还是块元素。但它的左边还是不允许存在任何元素与之同行显示,哪怕其它的元素的代码在前,除非也给前面的元素加上float:left后,才允许同行显示。
设了display:inline的元素,允许它的前后存在其它的内联元素同行显示。如果要让代码在前面的块元素与之同行显示,则要让前面的元素浮动(不管是左还是右浮动)或设为display:inline,如果要让代码在后面的块元素与之同行显示,则只能设为display:inline,浮动不起作用(无论左浮动还是右浮动)。即允许内联同行,块级要看情况。 给块级元素设上display:inline是解决有名的IE6中双倍浮动的利器。

position定位

规定元素的定位类型
  • static 静态定位(没有定位),默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
  • relative 相对定位,相对于其正常位置进行定位。
    不会脱离文档流;
    不影响元素本身的特性;
    如果没有定位偏移量,对元素本身没有任何影响;
  • absolute 绝对定位,最近非static定位的父级进行定位。
    使元素完全脱离文档流;
    没有定位父级则相对于body(整个文档)发生偏移;
    绝对定位一般配合相对定位使用;
  • fixed 固定定位,相对于浏览器窗口进行定位。
方位词
  • left: 距离左边的距离
  • right: 距离右边的距离
  • top:距离顶部的距离
  • bottom:距离底部的距离
  • z-index 规定定位的层级(默认0),仅能在定位元素上奏效。
    值:number 值越大层级越高
    注意:方位词相对于哪个对象偏移的

注意1:float和absolute会脱离文档流,所以对其设置宽高,不会影响其父元素的,切不要想通过设置其来撑开父级元素!

注意2:需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。而对于使用absolute positioning脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。

案例

需求:实现如下效果
①进入的时候界面:


image.png

②鼠标进入里面,两边“耳朵”显示出来:


image.png

③鼠标移动到某个圆,对应圆亮
image.png
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第四次作业</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }

        div{
            margin: 50px auto; /*左右居中*/
            width: 520px;
            height: 280px;
            position: relative;
        }
        ul.tab{
            width: 110px;
            height: 20px;
            border: 1px solid red;
            border-radius:20px;
            background: rgba(255,255,255,0.4);
            overflow: hidden;/*!*取消因li浮动导致的横线效果*!*/
            position: absolute;
            bottom: 10px; /*相对于父级div偏移*/
            left: 50%; /*左偏移50%*/
            margin-left: -50px;/*左边距再往回移动50px*/

        }
        ul.tab li{
            list-style: none;
            width: 10px;
            height: 10px;
            border: 1px solid red;
            background: white;
            border-radius: 50%;
            float: left; /*使li左浮动*/
            margin: 5px; /*间隔拉大点*/

        }

        ul.btn li{
            list-style: none;
            width: 25px;
            height: 30px;
            background: rgba(0,0,0,0.2);
            text-align: center;/*使li里面的内容水平居中和垂直居中*/
            line-height: 30px;
            font-size: 20px;
            color: white;
            position: absolute;/*因为要用到左右一个li,所以定位写在li里面,它会参考最近非static定位的父级进行定位即div*/
            top: 50%;
            margin-top: -15px;
            display:none;/*先隐藏起来*/
        }
        ul.btn li.left{
            left:0; /*相对于div左移*/
            border-radius:0 20px 20px 0;
            margin-left: -5px;
        }
        ul.btn li.right{
            right:0;/*相对于div右移*/
            border-radius:20px 0 0 20px;
            margin-right: -5px;
        }
        ul.tab li:hover{
            background: #F40;
            cursor: pointer;
        }
        div:hover ul.btn li{
            display: block;/*显示*/
        }
        div ul.btn li:hover{
            background: rgba(0,0,0,0.7);
            cursor: pointer;
        }

    </style>
</head>
<body>
    <div>
        <img src="https://aecpm.alicdn.com/simba/img/TB1XotJXQfb_uJkSnhJSuvdDVXa.jpg" alt=""/>
        <ul class="tab">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <ul class="btn">
            <li class="left">&lt;</li>
            <li class="right">&gt;</li>
        </ul>
    </div>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 前言 总括: 对于盒子模型,BFC,IFC和外边距合并等概念和问题的总结 原文地址:从CSS盒子模型说起 知乎专栏...
    秦至阅读 750评论 0 3
  • 作为一枚前端开发工程师,首先一定要清楚盒子模型是什么,因为盒子模型是html+css中最核心的基础知识,理解了这个...
    喵媛阅读 702评论 4 5
  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 4,422评论 5 15
  • 元素 常用的块状元素有: 、 、 ... 、 、 、 、 、 、 、 常用的内联元素有: 、 、 、 、 、 、...
    Looog阅读 308评论 0 1