zoukankan      html  css  js  c++  java
  • CSS:盒模型和position定位

    盒模型

    页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model )。请看Chrome DevTools 里的截图:

    可以显而易见的看出盒模型由 4 部分组成。从内到外分别是:

    content 内容 -> padding 内边距 -> border 边框 -> margin 外边距
    例如规定一个元素:
    <style>
        .example {
            width: 200px;
            padding: 10px;
            border: 5px solid #000;
            margin: 20px;
        }
    </style>

    这里还有两种特殊情况:

    • 无宽度 —— 绝对定位(position: absolute;) 元素
    • 无宽度 —— 浮动(float) 元素

    它们在页面上的表现均不占据空间(脱离普通流,感觉像浮在页面上层一样,移动它们不影响其他元素的定位)。这就涉及到另外两个核心概念 position 和 float。

    我的练习代码:

    <style>
    
    .box{
                width: 200px;
                height: 200px;
                /* border: 1px solid #999; */
                /* background-color: blue; */
                float: left;
                /* 外边距 */
                /* margin-top: 10px;
                margin-right: 10px;
                margin-bottom: 10px;
                margin-left: 10px; */
                margin: 100px 0px 0px 10px;
    
                /* 内边距 */
             /*padding-top: 10px;
                padding-right: 10px;
                padding-bottom: 10px;
                padding-left: 10px; */
                padding: 100px 50px 30px 10px;
    
                /* 边框 */
                border-top- 5px;
                border-top-style: solid;
                border-top-color: #999; 
                /* border-top: 5px solid #999; */
    
                /* border-right- 5px;
                border-right-style: solid;
                border-right-color: #999; */
                /* border-right: 5px solid #999; */
               /* 
                border-bottom- 5px;
                border-bottom-style: solid;
                border-bottom-color: #999; */
                /* border-bottom: 5px solid #999; */
                /* 
                border-left- 5px;
                border-left-style: solid;
                border-left-color: #999; */
                /* border-left: 5px solid #999; */
    
                border : 5px solid #999;
    </style>

    Position

    css里经常用到它,使html元素在网页中精确定位

    三种形式

    • 绝对定位(position: absolute)
    • 相对定位(position: relative)
    • 固定定位(position: fixed)

    绝对定位

    position:absolute;   (表示绝对定位)

    这条语句的作用将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口

    /* 如下面代码可以实现div元素(以一张200x200图片为例)相对于浏览器窗口向右移动100px,向下移动50px */
    <style>
    div{
        width:200px;
        height:200px;
        position:absolute;
        left:100px;   /*移动到距离最左100px的地方*/
        top:50px;     /*移动到距离最顶20px的地方*/
    }
    </style>
    ...
    <div><img src="img/right2.png"></div>

    相对定位

    position:relative;     (表示相对定位)

    相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动

    移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。(站着茅坑不拉屎)

    /*相对于以前位置向下移动50px,向右移动100px*/
    
    <style>
    #div1{
        width:200px;
        height:200px;
        border:2px red solid;
    
        position:relative;
        left:100px;
        top:50px;
    }
    </style>
    ...
    <div id="div1"></div>

    固定定位

    fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化。

    就像那些培训网站一打开右下角那个聊天窗口就是固定定位,害怕

    position:fixed;     (表示固定定位)

    但我们经常会把相对定位和绝对定位搭配使用:

    Relative与Absolute组合使用

    使用 position:absolute 可以实现被设置元素相对于浏览器(body)设置定位以后,

    然后元素相对于其它元素(如他的上一层)进行定位,使用 position:relative 来帮忙搞定

    <style>
    #box1{
        width:200px;
        height:200px;
        position:relative;        
    }
    
    /*定位元素加入position:absolute,便可以使用top、bottom、left、right来进行偏移定位了。*/
    
    #box2{
        position:absolute;
        top:20px;
        left:30px;     
    
    </style>
    ...
    
    <!-- 参照定位的元素必须是相对定位元素的前辈元素 -->
    
    <div id="box1">爸爸
        <div id="box2">儿子
        </div>
    </div>    
  • 相关阅读:
    Sharding-JDBC多数据源动态切换
    U 盘安装 CentOS 7 时出现 No Caching mode page found 问题的解决
    sudo 密码直接添加到命令行以方便实现脚本自动化
    Python3 Windows 虚拟环境的若干问题
    20 张图让你彻底弄懂 HTTPS 原理!
    全网写得最好的分库分表之 Sharding-JDBC 中间件介绍
    以为线程池很简单,结果第一道题就被干趴下了!
    以为线程池很简单,没想到第一问就被干趴下了
    分布式事务,看这篇就够了!
    我是一个线程池
  • 原文地址:https://www.cnblogs.com/kumata/p/9484691.html
Copyright © 2011-2022 走看看