zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【CSS】表格、定位_普通流定位与浮动定位、其他css常用属性_05

属性定位CSS 常用 表格 其他 05 普通
2023-09-14 09:13:40 时间

目录

一.CSS3概述

二.CSS的语法规范

三.基础选择器

四.尺寸和边框

五.盒子模型 

六.背景设置

七.渐变知识

八.文本格式化

九.表格

1.表格的常用属性

2.table的特有属性

(1) 垂直对齐

(2) 边框合并

(3) 边框间距

(4) 设置表格的显示规则

十.定位(重点**************************) 

1. 普通流定位

2. 浮动定位

3. 浮动的特殊情况

4. 清除浮动带来的影响

5.高度坍塌

十一.css中常用的其它属性

1.显示方式

2.显示效果

3.opacity 透明度

4.关于vertical-align

5.光标的设置

6.关于列表的属性


🆙【前文回顾】👉   css3渐变、文本格式化_04


一.CSS3概述

二.CSS的语法规范

三.基础选择器

四.尺寸和边框

五.盒子模型 

六.背景设置

七.渐变知识

八.文本格式化

九.表格

1.表格的常用属性

table   尺寸,文本,背景,边框,内外边距都有效

           注意,边框仅仅是table最外围的边框

td/th   尺寸,文本,背景,边框,内边距都有效 ——外边距无效

注意:td/th 外边距设置无效

2.table的特有属性

(1) 垂直对齐

设置内部内容的垂直对齐方式

vertical-align: top/middle/bottom;

只有table,使vertical-align设置内容的垂直对齐方式。

其它元素失效,其它元素line-height  ——且行高只能定义居中

(2) 边框合并

border-collapse: separate;  默认值,边框分离状态
                           collapse  边框合并

(3) 边框间距

边框必须是分离状态 border-collapse: separate

注意:如果是合并的话,边框间距属性会失效

border-spacing:v1;       水平和垂直间距同时设置
                         v1 v2   水平和垂直间距分别设置

(4) 设置表格的显示规则

table-layout: auto;    默认值,表格自动布局
                                 列的尺寸有内容和设置尺寸,谁大以谁为准
                     fixed    表格固定布局,设置的尺寸是多少,表格就是多少                                                                             内容比较大,内容会溢出

表格自动布局

表格固定布局

单元格大小,会自动根据内容和设置的尺寸进行调整

单元格大小,永远以设置的尺寸为准

表格内容较多时,加载速度慢,效率低

不管内容多少,加载速度都很快

自动布局比较灵活

固定布局不够灵活

适用于不确定每列大小,并且不复杂的表格

适用于确定每列大小的表格


十.定位(重点**************************) 

定位:设置元素在页面上的位置

分类:
1. 普通流定位
2. 浮动定位
3. 相对定位
4. 绝对定位
5. 固定定位

1. 普通流定位

各个元素原始的显示形式,就是普通流定位(默认文档流定位

2. 浮动定位

👉 浮动定位:让块级元素横向显示的时候,使用浮动定位

👉 浮动原理:

元素一旦浮动 👇

① 脱离文档流  ——不占页面空间,后续元素上前补位

② 在浮动的当前行,向左/右对齐

float:left/right/none(普通流)

浮动特点 👇

(1) 元素一旦浮动,会脱离文档流(脱离文档流会完成4件事)

① 不占页面空间

② 后续元素上前补位

③ 没有设置宽度的元素,脱离文档流之后,宽度靠内容撑开

④ 任何元素脱离文档流之后,都可以设置宽高,都可以设置上下外边距

(2) 浮动后的元素,会停靠在父元素最左边/右边,或者在其它浮动元素的后面排队

(3) 父元素横向放不下所有浮动元素时,最后显示不下的浮动元素会自动换行

(4) 浮动就是为了解决块级元素横向显示的问题

💦 CSS浮动原理:

假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素即不是浮动元素,也就是遵循标准流,那么A元素的相对垂直位置不会改变,也就是说A元素的顶部总是和上一个元素的底部对齐即A素顶部会紧贴上一个元素底部;

3. 浮动的特殊情况

(1) 浮动元素的占位问题

① 当父元素显示不下所有浮动元素时,显示不下的浮动元素会换行

② 浮动元素会在自己的浮动方向进行占位。

③ 换行的浮动元素要躲开被占位的空间

(2) 没有设置宽度的元素,浮动之后,宽度靠内容撑开

(3) 文本,行内,行内块,永远不会被浮动元素压在下面

(4) 任何元素浮动之后,都可以设置宽高,都可以设置上下外边距

4. 清除浮动带来的影响

浮动元素给后续不浮动元素带来了影响,后续元素会上前补位,会被浮动元素压在下面

清除浮动带来的影响,当前元素不上前补位

clear:left;      清除左浮动带来的影响
         right;    清除右浮动带来的影响
         both;    左右浮动带来的影响都清除

5.高度坍塌

父元素不写高度,内部所有子元素都浮动 ,父元素在文档流中找不到高度,所以高度缺失了

总结:父元素高度塌陷成因——子元素浮动,父元素没有设置高,子元素不能把父元素的高给撑开,导致父元素没有高度,这种现象叫父元素高度塌陷。

解决方案:1. 父元素添加高度,项目中经常用
                      适用于准确得到内部子元素高度的时候

比如:目前只有一行,如果之后放置多行,还得回来改父元素高度,很麻烦

                  2. 给父元素设置浮动,绝对不能用的方案
                      会影响元素的兄弟元素,和父元素的父元素,可能破坏原有的页面布局

                  3. 给父元素设置overflow:hidden/auto
                      父元素如果想溢出显示,就办不到了 

只要溢出的内容一律都会被隐藏,可能会隐藏不想被隐藏的部分

                  4. 给父元素添加一个小儿子,这个小儿子是空的div并且设置clear:both

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML与CSS简单页面效果实例</title>
</head>
<body>
    <div style="width:300px;background:#ccc;">
      <div style="width:100px;height:100px;float:left;background:Green;"></div>
      <div style="width:100px;height:100px;float:right;background:Red;"></div>
      <div style="clear: both;"></div>
    </div>
</body>
</html> 

💦 关于解决方案4

这个div和浮动元素同一级别,且位于浮动元素的最后。这种方法要改动两个地方,一个是html代码,另一个是必须要为这个div添加一个clear属性:<div style="clear:both"></div>。这种方法虽然也能解决高度问题,但是却引入了一个多余的标签div,它这里并不具有实际意义,它的作用只是撑开div标签而已。因此,最好的方法还是利用伪元素:after


🕐 关于解决方案4的原理 👇  ——在父元素中浮动元素最后添加一个空标签

◾ 原理:添加一个空标签,利用CSS的clear:both清除浮动(在父元素的最后一个子元素后边再增加一个非浮动的空的子元素,然后将这个子元素加个clear),让父元素可以自动获取到高度。

◾ 优点:简单,代码少,兼容所有浏览器

◾ 缺点:增加页面的标签,造成结构的混乱

◾ 建议:不推荐使用,此方法已经过时,推荐利用伪元素:after


对第4种方法的原理剖析:是因为父元素一定会包围着他所有遵循标准流的子元素(也就是你在最后新加的那个非浮动子元素),而这个子元素的顶部会紧贴在你的父div底部,所以父元素会因此撑开高度。(此时,父div 终于有高度了——为子div的最大高度100px。由于空div高度为0,所以父div最大高度是100px

扩展:说说overflow:hidden,可用于清除浮动用法的含义?


overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解。一提到清除浮动,我们就会想到另外一个CSS样式:clear:both,我相信对于这个属性的理解大家都不成问题的。但是对于“浮动”这个词到底包含什么样的含义呢?我们下面来详细的阐述一下。
 

这是一个常用的div写法,下面我们来书写样式。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #box {
        width: 500px;
        background: #000;
        height: 500px;
        overflow:hidden;
      }
      #content {
        float: left;
        width: 600px;
        height: 600px;
        background: red;
      }
    </style>
  </head>
  <body>
    <div id="box"> 
      <div id="content"></div>
    </div>
  </body>
</html>

给box这个div加了一个overflow:hidden这个属性解决了这个问题。我们直到overflow:hidden这个属性的作用是隐藏溢出,给box加上这个属性后,我们的content 的宽高自动的被隐藏掉了。另外,我们再做一个试验,将box这个div的高度值删除后,我们发现,box的高度自动的被content 这个div的高度值给撑开了。


说到这里,我们再来理解一下“浮动”这个词的含义。

我们原先的理解是,在一个平面上的浮动,但是通过这个试验,我们发现,这不仅仅是一个平面上的浮动,而是一个立体的浮动!也就是说,当content 这个div加上浮动这个属性的时候,在显示器的侧面,它已经脱离了box这个div,也就是说,此时的content 的宽高是多少,对于已经脱离了的box来说,都是不起作用的。
 

打个形象的比喻就是当JJ脱离BB的时候,JJ的大小对于BB是没有撑开的作用的(有点少儿不宜的感觉-_-|||) OK,当我们全面的理解了浮动这个词的含义的时候,我们就理解overflow:hidden这个属性中的解释,清除浮动是什么意思了。也就是说,当我们给box这个div加上overflow:hidden这个属性的时候,其中的content 等等带浮动属性的div的在这个立体的浮动已经被清除了,就好比JJ又进入了BB内,JJ的大小自然又会影响到BB的大小。这就是overflow:hidden这个属性清除浮动的准确含义。
 

当我们没有给box这个div设置高度的时候,content 这个div的高度,就会撑开box这个div,而在另一个方面,我们要注意到的是,当我们给box这个div加上一个高度值,那么无论content 这个div的高度是多少,box这个高度都是我们设定的值。而当content 的高度超过box的高度的时候,超出的部分就会被隐藏。这就是隐藏溢出的含义!总之,hidden的同时会清除浮动,使用这个属性后,就可以使外边的div层适应内部元素的高度了!

火狐里面解释的就是这个意思(float的属性就是立体漂浮,IE7和火狐也都是这个意思,IE6是不管外面的层的属性,content 会直接撑开box的),所以才在 height的auto属性中加入!important这个值!让他在IE7中优先执行这个命令儿忽略overflow:hidden;这个命令! 


十一.css中常用的其它属性

1.显示方式

定义元素在页面中以什么方式显示(行内,行内块,块级,表格)
display:inline;  行内元素
            block  块级
            inline-block  行内块
            table
            none   脱离文档流的隐藏

💦 display:inline 跟 display:block display:inline-block之间的区别


display:inline; 内联元素,简单来说就是在同一行显示。
display:block; 块级元素,简单来说就是就是有换行,会换到第二行。
display:inline-block; 就是在同一行内的块级元素。

示例如下:

<a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a>

<a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a>

A默认就是一行,所以inline用在这里是废的。宽高度设置也是费的。


<a href="#" style="display:block;width:100px;height:100px;background:#ccc;">链接一</a>

<a href="#" style="display:block;width:100px;height:100px;background:#ccc;">链接一</a>

块状,这里高宽度就生效了,但是因为是块状,前后有换行符,所以这是两行了。


<a href="#" style="display:inline-block;width:100px;height:100px;background:#ccc;">链接一</a>

<a href="#" style="display:inline-block;width:100px;height:100px;background:#ccc;">链接一</a>

这样就是同时达到块状,而且在同一行显示。

补:关于
display的特性

① 块级元素与行级元素的转变;② 控制块级元素在同一行显示;③ 控制元素的显示和隐藏;

说明

block

块级元素的默认值,元素会被显示为块级元素,该元素前后会带有换行符

inline

内联元素的默认值。元素会被显示为内联元素,该元素前后没有换行符

inline-block

行内块元素,元素既具有内联元素的特性,也具有块元素的特性

none

设置元素不会被显示

👉 display可以让元素排在一行(比如对div标签设置div{ display:inline}样式),并且支持宽度和高度代码实现起来方便;位置方向不可控,会解析空格;IE6.IE7上不支持;

👉 float可以让元素排在一行并制作宽度和高度,可以决定排列方向;
float浮动以后元素脱离文档流,会对周围元素产生影响,必须在它的父级上添加清除浮动的样式

👉 float属性控制html组件是否浮动与如何浮动,当通过该属性设置某个对象浮动后,该对象将被当成块组件处理。它有left和right两个值,分别指定对象向右向左浮动。而display属性用于规定元素应该生成的框的类型。



通过上述介绍可以看出,其实float和display原本是毫不相关的两个属性。在这里之所以要说float和display的区别,是由于在实现多栏布局和菜单栏导航时float和display出现了微妙的联系——设置float:left或display:inline-block都可以实现这一功能。

2.显示效果

visibility: visible;默认值,显示
               hidden; 隐藏,不脱离文档流

visibility: hidden; 与display:none;的区别

① visibility: hidden;看不见但是占位置

② display:none;看不见也不占位置

3.opacity 透明度

transparent<------>rgba(0,0,0,0);

opacity:0~1。   0全透明,1是不透明

opacity和rgba的区别

① rgba是让当前颜色透明

② opacity会让元素内部所有与颜色相关的属性全都透明(包括后代元素,和图片)

4.关于vertical-align

只在3中情况下可以使用

① 在table中使用  

vertical-align:top/middle/bottom

👉 让内部的文本垂直居中

② 给行内块设置     

vertical-align:top/middle(默认值)/bottom

👉 控制当前行内元素,之前/后,文本,行内,行内块与本元素的垂直对齐方式

注意:虽然是给自己设置的样式属性,影响的却不是自己,而是控制的其前或后的元素

③ 给img设置

vertical-align:top/middle/bottom/baseline(基线,默认值)

👉 控制当前img,之前/后,文本,行内,行内块与本img的垂直对齐方式 

通常项目中,会把img的vertical-align设置为非基线

补:vertical-align

vertical-align属性主要用于改变行内元素的对齐方式,对于行内布局影响很大,如果不了解的话,我们开发调整样式的时候很容易出错。
 

要了解vertical-align属性,必须懂得基线,怎么理解基线呢?
 

1、我们写网页是在一个矩形的显示屏上,经常是一行一行来布局,不可避免的是一行中会有多个内容,那么这行内容是如何上下对齐的呢?答案就是默认让他们的基线对齐。

2、各种字体、图片、行内html元素等可展示的内容都有各自的基线,要想知道具体内容的基线我们可以找一个简单的参照物:小写字母“x,为什么找它呢?因为英文字母的基线恰好就是小写"x"的最下方,比较容易看出。

知道了以上两点我们就可以很容易知道其他内容元素的基线位置了,把其他元素和小写“x”放在一行展示一下就一眼可以看出了:

5.光标的设置

光标的样式,要根据操作的系统不同,而使用系统光标

cursor: default;   默认值,小箭头

            pointer;  小手

            wait;  加载等待  ——通常是一只表或沙漏

            help;   帮助  ——此光标指示可用的帮助,通常是一个问号或一个气球

            text;    输入文本时提示给用户的字母I

            crosshair;   截图光标,十字

6.关于列表的属性

① 列表标识项的类型

list-style-type:disc

                      circle

                      square

                      none

② 使用图片做列表标识

list-style-image: url()

③ 列表标识的位置

list-style-position: outside(默认值,li外部)/inside(li内部);

④ 简写方案   list-style:none


🆕【后文传送门】👉 定位—相对定位,绝对定位,固定定位_06