前端学习(三)CSS基础2

本文深入讲解CSS布局核心机制,涵盖普通流、浮动、定位、清除浮动等关键概念,解析浮动与定位的特性及其应用场景,同时介绍用户界面样式的优化技巧。

浮动

CSS布局的三种机制

  • 普通流(标准流)
    • 块级元素独占一行,自上而下顺序排列
      • 常用元素:div、hr、p、h1-h6、ul、ol、dl、form、table
    • 行内元素会按照顺序,自左向右顺序排列,能自动换行
      • 常用元素:span、a、i、em等
  • 浮动
    • 让盒子从普通流中浮起来,主要用作让多个块级盒子在一行显示
  • 定位
    • 将盒子固定在某一个位置

为什么需要浮动

行内块(inline-block)有自己的缺陷

  • 能实现多个块级元素一行显示,但是中间会留下空白间隙
  • 不能实现盒子的左右对齐

什么是浮动

  • 概念:指设定了浮动属性的元素,会脱离普通流的控制,并移动到指定位置
  • 可以实现盒子的左右对齐
  • 浮动最早用来控制图片,实现文字环绕效果

语法

选择器 {
    float : 属性值;
}
属性值描述
none元素不浮动(默认值
left元素向浮动
right元素向浮动

浮动的特点

  • 盒子是浮起来的,漂浮于普通流盒子的上方(会盖住它们)
  • 浮起来的盒子不占位置,它的位置被之后的普通流盒子占领
  • 浮动让盒子具有类似行内块的属性,使得盒子之间没有空白间隙,并能设置宽高

浮动的关系

  • 浮动元素与父盒子的关系

    • 子盒子的浮动参照父盒子对齐
    • 不会与父盒子的边框重叠,也不会超过父盒子的内边距
  • 浮动盒子与兄弟盒子的关系

    • 在一个父级盒子中,如果前一个兄弟盒子是浮动的,那么当前盒子会与前一个盒子的顶部对齐;

    • 在一个父级盒子中,如果前一个兄弟盒子是普通流的,那么当前盒子会显示在前一个兄弟盒子的下方

如果一个盒子里面有多个盒子,其中一个浮动了,其它兄弟盒子也应该浮动

清除浮动

  • 为什么要清楚浮动:因为父级盒子很多情况下,不方便给高度,但是子盒子浮动就不占有位置,最后父级盒子高度为0,就影响了下面的标准流盒子。
  • 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
  • 准确地说,并不是清除浮动,而是清除浮动后造成的影响
  • 本质:清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

清除浮动的语法

选择器{clear:属性值;}
属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
right不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响

一般情况下,都是使用both

额外标签法(隔墙法)

在浮动元素末尾添加一个空的标签例如<div style="clear:both"></div>

  • 优点: 通俗易懂,书写方便
  • 缺点: 添加许多无意义的标签,结构化较差。

父级添加overflow属性方法

可以给父级添加: overflow为 hidden| auto| scroll 都可以实现。

优点: 代码简洁

缺点: 内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。

使用after伪元素清除浮动

:after 方式为空元素额外标签法的升级版,好处是不用单独加标签了

使用方法:

 .clearfix:after {  content: ""; display: block; height: 0; clear: both; visibility: hidden;  }   

 .clearfix {*zoom: 1;}   /* IE6、7 专有 */
  • 优点: 符合闭合浮动思想 结构语义化正确
  • 缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
  • 代表网站: 百度、淘宝网、网易等

使用双伪元素清除浮动

使用方法:

.clearfix:before,.clearfix:after { 
  content:"";
  display:table; 
}
.clearfix:after {
 clear:both;
}
.clearfix {
  *zoom:1;
}
  • 优点: 代码更简洁

  • 缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。

  • 代表网站: 小米、腾讯等

什么时候用清除浮动

  • 父级没高度

  • 子盒子浮动了

  • 影响下面布局了,我们就应该清除浮动了。

定位

  • 将盒子定在某一个位置,自由地漂浮在其它盒子上方(包括标准流和浮动)

  • 定位有两部分,定位模式 + 边偏移

边偏移

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

定位模式

在 CSS 中,通过 position 属性定义元素的定位模式,语法如下:

选择器 { position: 属性值; }

定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式。

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位

静态定位(static)

  • 静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面的none, 不要定位的时候用。
  • 静态定位 按照标准流特性摆放位置,它没有边偏移。
  • 静态定位在布局时我们几乎不用的

相对定位(relative)

  • 相对于 自己原来在标准流中位置来移动的
  • 原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。

绝对定位(absolute)

  • 绝对定位是元素以带有定位的父级元素来移动位置

  • 完全脱标 —— 完全不占位置

  • 父元素没有定位,则以浏览器为准定位

  • 父元素要有定位,将元素依据最近的已经定位(绝对、固定或相对定位)的父元素进行定位

固定定位(fixed)

  • 固定定位绝对定位的一种特殊形式
  • 完全脱标 —— 完全不占位置
  • 只认浏览器的可视窗口 —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置
    • 跟父元素没有任何关系;单独使用的
    • 不随滚动条滚动。

定位的居中

在使用绝对定位时要想实现水平居中,可以按照如下的方法:

  1. left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px;:让盒子向左移动自身宽度的一半

堆叠顺序

在使用定位布局时,可能会出现盒子重叠的情况

加了定位的盒子,默认后来者居上, 后面的盒子会压住前面的盒子。

应用 z-index 层叠等级属性可以调整盒子的堆叠顺序

z-index 的特性如下:

  1. 属性值正整数负整数0,默认值是 0,数值越大,盒子越靠上;
  2. 如果属性值相同,则按照书写顺序,后来居上
  3. 数字后面不能加单位

注意z-index 只能应用于相对定位绝对定位固定定位的元素,其他标准流浮动静态定位无效。

定位改变display属性

可以改变显示模式有以下方式:

  • 可以用inline-block 转换为行内块
  • 可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)
  • 绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块。

所以说, 一个行内的盒子,如果加了浮动固定定位绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等

边距合并问题

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题,也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。

圆角设置

  • 如果4个角,数值相同

    border-radius: 15px;
    
  • 里面数值不同,我们也可以按照简写的形式,具体格式如下:

border-radius: 左上角 右上角  右下角  左下角;

还是遵循的顺时针。

元素的隐藏与显示

  • 目的:让一个元素在页面中消失或者显示出来
  • 场景:类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现!

display 显示

使用:

  • display: none 隐藏对象

  • display:block 除了转换为块级元素之外,同时还有显示元素的意思。

特点:

  • 隐藏之后,不再保留位置

应用:

  • 配合js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单等等

visibility 可见性

使用:

  • visibility:visible ;  对象可视
  • visibility:hidden;   对象隐藏

特点:

  • 隐藏之后,继续保留原有位置

overflow 溢出

作用:当对象的内容超过其指定高度及宽度时如何管理内容

属性值描述
visible不剪切内容也不添加滚动条
hidden不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll不管超出内容否,总是显示滚动条
auto超出自动显示滚动条,不超出不显示滚动条

应用:

  • 清除浮动

  • 隐藏超出内容,隐藏掉, 不允许内容超过父盒子。

总结

属性区别用途
display隐藏对象,不保留位置配合js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛
visibility隐藏对象,保留位置使用较少
overflow只是隐藏超出大小的部分1. 可以清除浮动 2. 保证盒子里面的内容不会超出该盒子范围

CSS用户界面样式

所谓的界面样式, 就是更改一些用户操作样式,以便提高更好的用户体验。

  • 更改用户的鼠标样式
  • 表单轮廓等。
  • 防止表单域拖拽

鼠标样式cursor

设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。

属性值描述
default小白 默认
pointer小手
move移动
text文本
not-allowed禁止

示例代码:

<ul>
  <li style="cursor:default">我是小白</li>
  <li style="cursor:pointer">我是小手</li>
  <li style="cursor:move">我是移动</li>
  <li style="cursor:text">我是文本</li>
  <li style="cursor:not-allowed">我是文本</li>
</ul>

轮廓线outline

是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。

 outline : outline-color ||outline-style || outline-width 

但是我们都不关心可以设置多少,我们平时都是去掉的。 li

最直接的写法是 : outline: 0; 或者 outline: none;

 <input  type="text"  style="outline: 0;"/>

## 防止拖拽文本域resize

实际开发中,我们文本域右下角是不可以拖拽:

<textarea  style="resize: none;"></textarea>

用户界面样式总结

属性用途用途
鼠标样式更改鼠标样式cursor样式很多,重点记住 pointer
轮廓线表单默认outlineoutline 轮廓线,我们一般直接去掉,border是边框,我们会经常用
防止拖拽主要针对文本域resize防止用户随意拖拽文本域,造成页面布局混乱,我们resize:none

垂直对齐vertical-align

  • 有宽度的块级元素居中对齐:margin: 0 auto;
  • 让文字居中对齐: text-align: center;

vertical-align 垂直对齐,它只针对于行内元素或者行内块元素,特别是行内块元素,vertical-align 不影响块级元素中的内容对齐, 通常用来控制图片/表单与文字的对齐

用法:

vertical-align : baseline |top |middle |bottom 

图片、表单和文字对齐

可以通过vertical-align 控制图片和文字的垂直关系了。 默认的图片会和文字基线对齐。

模式代码
基线对齐(默认)vertical-align:baseline
垂直居中vertical-middle
顶部对齐vertical-top
底部对齐vertical-bottom

去除图片底侧空白缝隙

  • 原因:

    图片或者表单等行内块元素,他的底线会和父级盒子的基线对齐。

    就是图片底侧会有一个空白缝隙。

  • 解决的方法就是:

    • 给img vertical-align:middle | top| bottom等等。 让图片不要和基线对齐。

    • 给img 添加 display:block; 转换为块级元素就不会存在问题了。

溢出的文字省略号显示

white-space

设置文本显示方式。通常我们使用于强制一行显示内容

  • white-space:normal ;默认处理方式

  • white-space:nowrap ; 强制在同一行内显示所有文本,直到文本结束或者遭遇br标签对象才换行

text-overflow 文字溢出

设置是否使用一个省略标记(…)标示对象内文本的溢出

  • text-overflow : clip ;不显示省略标记(…),而是简单的裁切

  • text-overflow:ellipsis ; 当对象内文本溢出时显示省略标记(…)

总结

  /*1. 先强制一行内显示文本*/
      white-space: nowrap;
  /*2. 超出的部分隐藏*/
      overflow: hidden;
  /*3. 文字用省略号替代超出的部分*/
      text-overflow: ellipsis;

精灵技术sprite

  • 目的:减少服务器和客户端之间的请求次数,将多张小图作为一张精灵图只传输一次

  • 对象:针对于背景图片,插入的图片img 是不需要的

  • 步骤:

    • 精确测量,每个小背景图片的大小和 位置
    • 给盒子指定小背景图片时, 背景定位基本都是 负值

滑动门

主要就是利用CSS精灵(主要是背景位置)和 盒子padding撑开宽度, 以便能适应不同字数的导航栏

一般的经典布局都是这样的:

<li>
  <a href="#">
    <span>导航栏内容</span>
  </a>
</li>

css样式

* {
      padding:0;
      margin:0;

    }
    body{
      background: url(images/wx.jpg) repeat-x;
    }
    .father {
      padding-top:20px;
    }
    li {
      padding-left: 16px;
      height: 33px;
      float: left;
      line-height: 33px;
      margin:0  10px;
      background: url(./images/to.png) no-repeat left ;
    }
    a {
      padding-right: 16px;
      height: 33px;
      display: inline-block;
      color:#fff;
      background: url(./images/to.png) no-repeat right ;
      text-decoration: none;
    }
    li:hover,
     li:hover a {
      background-image:url(./images/ao.png);
    }

总结:

  1. a 设置 背景左侧,padding撑开合适宽度。
  2. span 设置背景右侧, padding撑开合适宽度 剩下由文字继续撑开宽度。
  3. 之所以a包含span就是因为 整个导航都是可以点击的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值