小白前端09-定位/元素隐藏/CSS技巧


1.定位

1.1 定位基础

  • 需要定位的原因
    1.当需要某个元素自由的在盒子内移动位置,并且压住其他盒子时。
    2.当滚动窗口时,需要固定在屏幕上的盒子。

  • 定位组成

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

    • 语法:通过CSS的position属性来设置,有4个取值
    语义
    static 静态定位
    relative 相对定位
    absolute 绝对定位
    fixed 固定定位
  • 边偏移:

  • 语法:有top、bottom、left、right这4个属性

    边偏移属性 示例 描述
    top top:80px 顶端偏移量,定义的元素相对于其父元素上边线的距离
    bottom bottom:80px 底部偏移量,定义的元素相对于其父元素下边线的距离
    left left:80px 左侧偏移量,定义的元素相对于其父元素左边线的距离
    right right:80px 右侧偏移量,定义的元素相对于其父元素右边线的距离

1.2 定位模式

1.2.1 静态定位

  • 作用:静态定位时元素的默认定位方式,未定位的意思
  • 语法:选择器{ position: static; }
    • 静态定位按照标准流特性摆放位置,它没有边偏移
    • 静态定位在布局时很少用到。

1.2.2 相对定位

  • 作用:相对定位是在元素移动位置时,相对于它原来的位置来说的。
  • 语法:选择器 { position: relative; }
  • 特点:
    • 相对于自己原来的位置移动的,参考点是自己原来的位置。
    • 原来的位置继续保留,不会被其他元素顶替。原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待(不脱标,继续保留原有位置

相对定位最典型的应用是给绝对定位当爹的

1.2.3 绝对定位

  • 作用:绝对定位是元素在移动时,是相对于它的祖先元素来说的。
  • 语法:选择器{position:absolute;}
  • 特点:
    • 如果没有祖先元素祖先元素没有定位,则以浏览器为准进行定位。
    • 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级有定位的祖先元素为参考点进行移动。
    • 绝对定位不再占有原来的位置。(脱标

1.2.4 子绝父相

  • 含义:子级使用绝对定位,父级则需要使用相对定位
  • 原因:
    1.子级绝对定位不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
    2.父盒子需要加定位限制子盒子在父盒子内显示。
    3.父盒子布局时,需要占有位置,防止后面的盒子顶替原有的位置,因此父盒子只能是相对定位。

1.2.5 固定定位

  • 作用:固定定位是元素固定于浏览器可视区的位置,主要使用于浏览器页面滚动时元素的位置不会改变。
  • 语法:选择器{ position:fixed; }
  • 场景:网页中固定在浏览器的广告
  • 特点:
    • 以浏览器的可视窗口为参考点进行移动。
      • 跟父元素没有任何关系
      • 不随滚动条滚动。
    • 固定定位不占有原先的位置。 (脱标
      • 可以把固定定位看做特殊的绝对定位。

1.2.6 固定在版心的右侧:

  • 小算法:
  1. 让固定定位的盒子left:50%,走到浏览器可视区的的一半位置(即版心的中间)。
  2. 让固定定位的盒子margin-left:版心宽度的一半距离。即再多走版心宽度的一半,就可以让固定定位的盒子紧贴着版心右侧对齐了。

注意: 固定定位的盒子一定要写在版心盒子的前面,否则,固定定位的盒子会被版心盒子盖住。

1.2.7 粘性定位

  • 作用:粘性定位可被看作 相对定位和固定定位的混合。 sticky:粘性的
  • 语法:选择器 {position: sticky; top:10px; }
  • 场景:
  • 特点:
    • 浏览器可视窗口为参照点移动(固定定位的特点)
    • 粘性定位占有原先的位置(相对定位的特点)
    • 必须添加top、left、right、bottom 其中一个才有效
  • 缺点:兼容性较差,IE不支持。

1.2.8 绝对定位盒子居中算法

  • 原因:加了绝对定位的盒子不能通过margin:0 auto;来水平居中。
  • 算法:
    1.left:50%;: 让盒子的左侧移动到父级元素的水平中心位置。
    2.margin-left:-100px;: 让盒子向左移动自身宽度的一半。(注意是左移负值

1.2.9 定位的特殊特性

  1. 绝对定位和固定定位也和 浮动类似。
    • 行内元素添加 绝对或固定定位,可以直接设置宽度和高度
    • 块级元素添加 绝对或固定定位,如果不给宽高,默认大小是内容的大小
  2. 浮动元素、绝对定位 和 固定定位的元素,都不会触发外边距合并问题
  3. 绝对定位和固定定位 会完全压制盒子
    • 浮动元素不同,只会压住它下面标准流的盒子,但不会压住下面标准流盒子里的文字(图片)。因为浮动产生的目的,最初就是为了做文字环绕效果的。
    • 但是绝对定位和固定定位会完全压住。

1.2.8 定位总结

定位模式 是否脱标 移动位置 是否常用
static 静态定位 不能使用边偏移 很少
relative 相对定位 否(占有位置) 相对自身位置移动 常用
absolute 绝对定位 是(不占位置) 带有定位的父级 常用
fixed 固定定位 是(不占位置) 浏览器可视区 常用
sticky 粘性定位 否(占有位置) 浏览器可视区 当前阶段很少
  • 注意:
    1.三大定位的两个特点: 1.是否脱标 2.以谁为基准点移动位置。
    2.重点是子绝父相。

1.3 定位叠放次序

  • 作用:使用定位布局时,可能会出现盒子重叠的情况。因此,可以使用 z-index来控制盒子的前后次序(z轴)
  • 语法: 选择器{z-index:1;}
    • 数值可以是正整数、负数或0,默认是auto,数值越大,盒子越靠上
    • 只有定位的盒子才有z-index属性
    • 如果数值相同,则按照书写顺序,后来居上
    • 数字后面不能加单位

2.网页布局总结

  • 大部分的HTML标签是一个盒子

  • 一个完整的网页,是由标准流、浮动、定位一起完成布局的,每个都有自己专门的用法

  • 1.标准流
    可以让盒子上下排列或左右排列,垂直的块级盒子显示就用标准流布局

  • 2.浮动
    可以让多个块级元素一行显示 或 左右对齐盒子,多个块级盒子水平显示就用浮动布局

  • 3.定位
    定位最大的特点是 有层叠的概念,就是可以让多个盒子前后层叠来显示,如果元素自由在某个盒子内移动就用定位布局


3.元素显示和隐藏

  • 作用:让一个元素在网页中隐藏或显示出来。
  • 场景:类似一个网页广告,点击关闭就不见了,但是刷新网页会重新出现。
  • 分类: display显示隐藏, visibility显示隐藏, overflow溢出显示隐藏

3.1 display属性

  • 作用:display属性用于设置一个元素如何显示
  • 语法:
    • display:none; 隐藏对象
    • display:block; 除了转化为块级元素之外,还有显示元素的意思
  • 特点: display 隐藏元素后,不再占有原来的位置
    后面的应用很广,搭配JS可以做很多网页特效。

3.2 visibility 可见性

  • 作用:visibility属性 用于指定一个元素应该 可见还是隐藏。
  • 语法:
    • visibility:visible;,元素可视
    • visibility:hidden;,元素隐藏
  • 特点: visibility隐藏元素后,继续占有原来的位置

3.3 overflow 溢出

  • 作用:overflow属性指定了如果内容溢出一个元素的框(超过其指定的高度及宽度)时,会发生什么。
  • 语法:
属性值 描述
visible 不剪切内容也不添加滚动条
hidden 不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll 不管是否超出内容,都显示滚动条
auto 超出自动显示滚动条,不超出不显示滚动条

注意:
1.一般情况下,都不想让溢出的内容显示出来,因为溢出的部分会影响布局。
2.如果有定位的盒子,慎用overflow:hidden;,因为会隐藏多余的部分。


4.CSS技巧

4.1 精灵图

  • 原因:有效减少服务器接受和发送请求的次数,提高网页的加载速度,出现了精灵图(CSS Sprited/CSS 雪碧)技术。
  • 原理:将网页中的一些小背景图像整合在一张大图里,这样服务器只需要一次请求就可以了。这个大图也称为 sprites 精灵图。
  • 使用:
    • 移动背景图片位置,使用background-position
    • 移动的距离就是这个目标图片的x和y值。注意:y轴是向下为正的。
    • 一般情况是往上往左移动,所以数值是负值。
    • 在使用精灵图的时候要精确测量,每个小背景图片的大小和位置。

注意: 移动的是背景图,不是移动的选择框。

4.2 字体图标

  • 字体图标使用场景:网页中通用、常用的一些小图标。
  • 不使用精灵图的原因:
    • 精灵图还是比较大的
    • 图片本身放大和缩小会失真。
    • 一旦图片制作完毕更换会很麻烦。
  • 字体图标:iconfont,展示的是图标,本质是字体
    • 优点:
      1.轻量级-减少服务器的请求,图标渲染快。
      2.灵活性-本质是文字,可以随意更改颜色、大小、阴影、透明、旋转等。
      3.兼容性-几乎支持所有的浏览器。
    • 缺点:字体图标不能代替精灵技术,只是对图标部分的技术提升和优化。
  • 字体图标的引入:
    1.把下载包里的font文件夹放入页面的根目录下。
    2.在CSS样式中全局声明字体:可以理解为把这些字体通过CSS引入页面中。(不需要记忆,直接复制)
    @font-face {
                font-family: 'icomoon';
                src:  url('fonts/icomoon.eot?q17km');
                src:  url('fonts/icomoon.eot?q17km#iefix') format('embedded-opentype'),
                  url('fonts/icomoon.ttf?q17km') format('truetype'),
                  url('fonts/icomoon.woff?q17km') format('woff'),
                  url('fonts/icomoon.svg?q17km#icomoon') format('svg');
                font-weight: normal;
                font-style: normal;
                font-display: block;
              }
    span{
      font-family:  'icomoon';
      font-size: 14px;
    }
    
    ...
    
    <span> 小方框1</span>
    <span> 小方框2</span>
    
    3.声明字体的种类font-family:'iconmoon';
    4.复制下载下来的字体图标网页里的小方框,粘贴到HTML标签中
  • 字体图标的追加:
    • 把压缩包里的 selection.json 重新上传,然后选中想要的新图标,重新下载压缩包,替换原来的文件即可。

4.3 CSS三角

  • 语法:border-size属性决定了三角形的大小。
    .box{
              width: 0;
              height: 0;
              border: 10px solid transparent;
              border-left-color: pink;
                          line-height:0;
                          font-size:0;
          }
    
    后两句代码是为解决兼容性问题。

4.4 CSS用户界面样式

4.4.1 鼠标样式

  • 作用:改变鼠标的显示样式
  • 语法:选择器 { cursor:pointer;}
    属性值 描述
    default 小白 默认
    pointer 小手
    move 移动
    text 文本
    not-allowed 禁止

4.4.2 轮廓线

  • 作用:改变表单选中时的边框
  • 语法:input { outline:none;},去掉默认的蓝色边框。

4.4.3 防止拖拽文本域

  • 作用:防止文本域可拖拽,即去掉右下角。
  • 语法:textarea {resize:none;}

注意:要想文本域里的输入,起始和边框没有距离,只需要把<textarea></textarea>放在一行里即可。

4.5 vertical-align 属性应用

  • 作用:用于设置图片或表单(行内块元素) 和 文字的垂直对齐。
  • 解释:设置一个元素的垂直对齐方式,只针对行内元素和行内块元素有效。
  • 语法:
    vertical-align: baseline | top |middle |bottom;
    描述
    baseline 默认,元素放置在父元素的基线上
    top 把元素的顶端和行中最高元素的顶端对齐
    middle 把此元素放置在父元素的中部
    bottom 把元素的底端和行中最低的元素的底端对齐

4.6 解决图片底部默认空白缝隙

  • 问题:图片底侧会有一个空白缝隙,原因是 行内块元素 会和 文字的基线对齐。
  • 解决方法:
    1.给图片添加vertical-align: middle | bottom | top ;(提倡)
    2.把图片转换为块级元素:display:block;

4.7 溢出的省略号显示

  • 单行文本溢出省略号
    • 必须满足三个条件:
    /*1. 先强制一行内显示文本*/
    white-space: nowrap; ( 默认 normal 自动换行)
     /*2. 超出的部分隐藏*/
    overflow: hidden;
     /*3. 文字用省略号替代超出的部分*/
      text-overflow: ellipsis;
    
  • 多行文本溢出省略号
    问题:有较大的兼容性问题,适合于webkit浏览器或移动端(移动端大部分是webkit内核)
    overflow:hidden;
    text-overflow:ellipsis;
    /* 弹性伸缩盒子模型显示 */
    display: -webkit-box;
    /* 限制在一个块元素显示的文本的行数 */
    -webkit-line-clamp:2;
    /* 设置或检索伸缩盒对象的子元素的排列方式*/
    -webkit-box-orient: vertical;
    

5.常见布局技巧

  • margin负值的运用
    1.让每个盒子 margin 往左侧移动 -1px,正好压住相邻盒子边框。
    (防止相邻盒子边重叠,造成加粗现象)
    2.鼠标经过某个盒子时,提高当前的盒子层级。没有定位,则加相对定位(保留位置);如果有定位,则加z-index
    (鼠标经过显示边框颜色,会出现边框颜色显示不全的现象。设置层级,可以压住其他盒子,显示完整。)

  • 文字围绕浮动元素

    • 方法:直接在大盒子里写上文字,然后让图片浮动在盒子里,文字就会自动围绕图片排列。
  • 行内块的巧妙运用

    • 设置页数跳转。直接设置一个大盒子,然后在里面设置很多a标签,在样式里使用display:inline-block;,可以方便设置。
  • CSS三角强化

    • 制造直角三角形:
      1.将边框的宽和高都设置为0
      (此时相当于四个三角形上左下右,拼成一个正方形(各边宽度相等的情况下))
      2.左边和下边的边框宽度设置为0
      (下边的边框宽度为0,使下面的三角形减小到消失,同时左右的三角形逐渐变成直角三角形,最终剩下的三个三角形成为一个长方形;左边的同理,左边的三角形缩小到消失,右边的三角形不变,上三角形逐渐变成直角三角形,和右三角形成为一个小的长方形。)
      3.把上边框的宽度调大,颜色为透明。(直角边的高度)
      (上边框宽度越大,则长方形的高度越高,将上边框设置为透明,则上三角形消失,只剩下右边的直角三角形。)
    width:0;
    height:0;
    border-color: transparent red transparent transparent;
    border-style: solid;
    border-width: 22px 8px 0 0;
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • 一、CSS入门 1、css选择器 选择器的作用是“用于确定(选定)要进行样式设定的标签(元素)”。 有若干种形式的...
    宠辱不惊丶岁月静好阅读 1,578评论 0 6
  • 技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1....
    CurryCoder阅读 368评论 0 2
  • 1.浮动 1.1传统网页布局的三种方式 普通流(标准流)概念:标签按照规定的默认方式排列块级元素会独占一行,从上到...
    OohMuYi阅读 383评论 1 0
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,800评论 0 6
  • 一、html 1.1 排版标签 标题: ~ 段落: 换行: 水平线: 1.2 文本格式化标签 加粗: ...
    AizawaSayo阅读 1,246评论 0 16