css的学习(下)两千字入门css的几种布局(flex,grid,float...)

简介: # 规则生效问题## 优先级 特异度的值来决定的### 选择器的特异度 Sqecificity id (伪)类 标签 #id .class tag 百 十 个# 继承 某些属性会自动继承其父元素的计算值 除非显示的 指定一个值 文字相关的,颜色,字体 不给会继承 一些盒子模型 大小 不会继承## css可以和不可以继承的属性 不可继承的:display、margin、border、padding、background、height、min

规则生效问题

优先级

特异度的值来决定的

选择器的特异度 Sqecificity

id      (伪)类      标签
#id     .class       tag
百       十           个

继承

某些属性会自动继承其父元素的计算值 除非显示的 指定一个值
文字相关的,颜色,字体 不给会继承
一些盒子模型 大小 不会继承

css可以和不可以继承的属性

不可继承的:display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、
overflow、position、left、right、top、bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、
page-bread-before和unicode-bidi。
所有元素可继承:visibility和cursor。
内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、font-family、
font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。
终端块状元素可继承:text-indent和text-align。
列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。
表格元素可继承:border-collapse。 

显示继承 inherit

例如 
* {
    box-sizing: inherit;
}
上边通过一个通配选择器 让所有的元素都可以继承 box-sizing
后面的元素都可以继承了

初始值

initial
一个元素 一直往上找 没找到继承的值
如果没有继承的值 就用初始值
一个元素 不可继承的 又没有指定值
或者可继承 没有继承到
            例如
                background-color: transparent;
                margin-left: 0;
            可以使用 initial 关键字 显示重置为初始值
                background-color: initial;

额外拓展

media https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media */

CSS求值过程

image.png

布局 Layout

布局相关技术

常规流

    normal flow
               块级
               行级
               表格布局
               FlexBox
               Grid
                      盒模型
                        理解成一个一个的盒子
                        margin
                              margin跟padding一样,也有简洁写法。我们可以使用margin属性来设置四个方向的外边距。
                              在实际编程中,我们往往使用的是margin的这种高效简洁写法来编程。
                              margin-top--margin-right--margin-bottom--margin-left,即“上-右-下-左”。以下简写为
                              top--right--bottom--left。其中需要注意的是后三种情况,当有像素值缺省时,浏览器会自动对缺省像素按照
                              “bottom=top”和“left=right”的方法进行赋值。
                              指定元素四个方向的外边框
                              取值可以是长度 百分数 auto
                                auto
                                    ->左右都是auto
                                      会取中间值然后水平居中
                              百分数是相对于容器宽度
                                    margin collapse
                                    margin在垂直方向上有时候会出现边距的折叠融合合并
                                        如:上100px 下100px (margin-bottom: 100px 和 margin-top: 100px)
                                            两个组组件的间距 100px 而不是 200px
                                    **只会取两个边距中较大的,而不是相加**
            ##################### box-sizing:boder-box; 区别:包括padding 和 border 如 设置100% 实际小于 100% 页面无滚动 推荐 ##########            
                        
                        border
                             border 简写属性在一个声明设置所有的边框属性。可以按顺序设置如下属性:border-width border-style 
                             border-color
                            如果不设置其中的某个值,也不会出问题,比如 border:solid #ff0000; 也是允许的。
                            指定边框的样式,粗细和颜色。
                                三种属性
                                    border-width: 可以设置边框的宽度。
                                    border-style: 可以设置边框的样式。
                                    border-color: 可以设置边框的颜色。
                                四个方向
                                    border-top
                                    border-right
                                    border-bottom
                                    border-left
                                可以同时设置多个方向的边框。
                        padding
                                padding 简写属性在一个声明中设置所有内边距属性。可以按顺序设置如下属性:padding-top padding-right
                                指元素四个方向的内边距
                                百分数相对于容器宽度
                                          10px -> 四个都是10px
                                          10px 20px -> 左右两个是10px,上下两个是20px
                                          10px 20px 10px 20px -> 从上开始 顺时针转一圈
                                
                        content (width,height)
                            width -> 指定content box 宽度
                                     取值为 长度 百分数 auto
                                     auto 由浏览器根据其他属性确定
                                     百分数相对于容器的context box宽度
                            height -> 指定content box 高度
                                     取值为 长度 百分数 auto
                                     auto 由浏览器根据其他属性确定
                                     百分数相对于容器的context box高度
                                     容器有指定高度的时候,百分数才生效。
                        层层包裹    

浮动

    float
        可以文字 图片的一些效果

绝对定位

    position
            盖在常规流上面 任意的改变位置 对常规流不会有上面影响 

定位 position

定位属性:
    position: absolute;
    position: relative;
    position: fixed;
    position: sticky;
    position: static;
    position: initial;
    position: inherit;
    position: unset;
定位属性的值:
    static
    relative
    absolute
    fixed
    sticky
    initial
    inherit
    unset
定位属性的作用:
    定位元素的位置
    定位元素的大小
    定位元素的内容
    定位元素的父元素
    定位元素的兄弟元素
    定位元素的子元素
    定位元素的祖先元素
    定位元素的所有祖先元素
    定位元素的所有兄弟元素
    定位元素的所有子元素
    定位元素的所有祖先元素
    定位元素的所有子元素
    定位元素的所有祖先元素
    定位元素的所有子元素
    定位元素的所有祖先元素
    定位元素的所有子元素

overflow

overflow这个属性:

visible -> 超出可见 但是会超越设定的范围
    hidden ->  超出不可见
    scroll -> 超出可见 滚动

overflow-wrap:break-world;换行

块级 and 行级

行级由内容决定

Block Level Box           Inline Level Box
不和其他盒子并列摆放        和其他行级盒子一起放在一行或拆开成多行
适用所有的盒模型属性        盒模型中的width,height不适用

生成块级盒子               生成行级盒子
                          内容分散在多个行盒(line box)中
body,article,div          span,emstrong,cite,code等
main,section,h1-6,p
ul,li等
display: block;           display: inline;
(把任意一个元素转化成块级盒子或者行级盒子)
display 属性
        -> display: block;  => 块级盒子
        -> display: inline; => 行级盒子
        -> display: inline-block;   =>本身是行级,可以放在行盒中 可以设置宽高 作为一个整体不会被拆散成多行  (只能放在一行)
                                         例如 : 一个图片 可以和文字在一行展示 但是没办法 把图片分成两行展示。
        -> display: none;  => 排版时完全被忽略

行级的排版上下文

lnline Formatting Context(IFC)
只包含行级盒子的容器会创建一个IFC
IFC内的排版规则
    盒子在一行内水平摆放
    一行放不下的时候,换行显示
    text-align: 决定一行内盒子的水平对齐
        text-align: left;
        text-align: right;
    vertical-align: 决定一行内盒子的垂直对齐
        vertical-align: top;
        vertical-align: middle;
        vertical-align: bottom;
    避开浮动(float)元素

块级排版上下文

Block Formatting Context(BFC)
某些容器会创建一个BFC
    根元素
    浮动,绝对定位,inline-block
    Flex子项和Grid子项
    overflow值不是visible的块盒
    display: flow-root;
BFC内的排版规则
    盒子从上到下摆放
    垂直margin合并 之前的margin边距不是相加而是取最大
    BFC内盒子的margin不会与外面的合并  解决margin融合重叠问题 分开 放在不同的DFC中 嵌套div并设置display:flow-root;
    BFC不会和浮动元素重叠 清除浮动经常用的一个技巧
    

Flex Box

一种新的排版上下文
它可以控制子级盒子的:
    摆放的流向(上下左右)
    摆放的顺序
    盒子宽度和高度
    水平和垂直方向的对齐
    是否允许折行

使用

设置 display: flex;
遵循flex布局 而不是IFC BFC

控制流向
    flex-direction: row | column | row-reverse | column-reverse
    默认 row 反向 column
控制对齐
    传统 水平 垂直
    引入
        主轴 justify-cnontent
            flex-start | flex-end | center | space-between | space-around
            不设置
                默认 justify-content: flex-start;
            基线对齐
                align-items: flex-start | flex-end | center | baseline | stretch
        侧轴

Flexibility */

Flexibility
    可以设置子项的弹性,当容器有剩余空间是,会伸展,容器空间不够时,会收缩
    flex-grow 有剩余空间时的伸展能力
    flex-shrink 容器空间不足时收缩的能力
    flex-basis 没有伸展或收缩时的基础长度

Flex及FLex的缩写

flex:1                       flex-grow: 1;      弹簧,弹力
flex:100px                   flex-basis: 100px; 基础长度 没有设置 一般读取一些宽度和高度的值 直接写宽度也可以
flex:2 1                      flex-grow: 2;flex-shrink: 1;   
flex: auto
flex: none
flex: stretch               换行

Grid

区别:二维网格 Flex 一维
display: grid; => 创建一个Grid容器
使用grid-template 相关属性将容器划分为网格
    划分网格
        grid-template-columns: 100px 100px 200px;
        grid-template-rows: 100px 10px

        grid-template-columns: 30% 30% auto;
        grid-template-rows: 100px auto;

        grid-template-columns: 100px 1fr 1fr;
        grid-template-rows: 100px 1fr;  fr ==份

        上竖着 下横着
设置每一个子项栈哪些行列

grid lin 网格线

grid-row-start: 1;
grid-column-start: 1;
grid-column-end: 3;
grid-row-end: 3;
或者
grid-area: 1 / 1 / 3 / 3;

float 浮动

实现文字环绕的一个功能
可以使用float属性
    float: left;
    float: right;
    float: none;
    float: inherit;

position 绝对定位

position: static;     默认值,非特定元素
position: relative;   相当于自身位置做一个偏移,不脱离文档流
    ->  
        在常规流里面布局
        相对于自己本应该在的位置进行偏移
        使用top,left,bottom,right设置偏移长度
        流内其他元素当他没有偏移一样布局
position: absolute;   绝对定位,相对非static祖先元素定位
    ->
        脱离常规流
        相对于最近的非static祖先定位
        不好对流内元素布局造成影响
position: fixed;      相对于窗口绝对定位
    -> 
        和absolute区别,后者找父类。前者找窗口
                                        -> 导航栏
position: sticky;      粘性定位。
相关文章
|
2月前
|
Web App开发 前端开发
【CSS】——基础入门常见操作
CSS引入,CSS对元素美化,style修饰,选择器(标签选择器,类选择器,ID选择器,复合选择器),font-size , boder ,width,height,margin,paddiing
|
4月前
|
前端开发 UED 容器
使用 Flex 布局实现垂直居中效果
【10月更文挑战第7天】
504 57
|
3月前
|
容器
Bootstrap5 Flex(弹性)布局4
排序:.order 类可设置弹性子元素的排序,范围从 .order-1 至 .order-12,数字越小优先级越高。外边距:.ms-auto 和 .me-auto 分别用于设置子元素的右侧和左侧外边距为 auto。包裹:.flex-nowrap(默认)、.flex-wrap 和 .flex-wrap-reverse 用于控制弹性容器中的子元素是否换行及换行方向。
|
2月前
|
容器
Bootstrap5 Flex(弹性)布局6
使用 `.align-self-*` 类可控制指定子元素的对齐方式,包括 `.align-self-start`, `.align-self-end`, `.align-self-center`, `.align-self-baseline`, 和 `.align-self-stretch`。示例代码展示了如何在一个弹性布局中应用这些类,以实现不同设备上的响应式设计。
Bootstrap5 Flex(弹性)布局5
使用 .align-content-* 控制多行子元素在垂直方向上的堆叠方式,如 .align-content-start、.align-content-center 等。对于单行子元素,使用 .align-items-* 控制对齐,例如 .align-items-start、.align-items-center 等。示例代码展示了不同对齐效果的应用。
Bootstrap5 Flex(弹性)布局2
介绍Flex布局的水平和垂直方向控制。`.flex-row`使子元素水平排列,默认左对齐;`.flex-row-reverse`则右对齐。`.flex-column`让子元素垂直排列;`.flex-column-reverse`则反向排列。示例展示了不同类的效果,通过改变类名实现布局调整。
Bootstrap5 Flex(弹性)布局3
`.justify-content-*` 类用于调整弹性子元素的对齐方式,支持 start、end、center、between、around 等值。`.flex-fill` 类使所有子元素等宽,而 `.flex-grow-1` 则让指定子元素占据剩余空间。这些类在布局设计中非常实用。
|
3月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
3月前
|
容器
HTML中使用Flex布局实现双行夹批效果
在HTML中,还可以用table元素来实现双行夹批效果,但比flex布局代码更复杂,效果也不见得更理想。
73 10
|
3月前
|
开发者 UED 容器
鸿蒙next版开发:ArkTS组件通用属性(Flex布局)
在HarmonyOS next中,ArkTS的Flex布局是一种强大且灵活的布局方式,支持水平或垂直方向排列元素,并能动态调整大小和位置以适应不同屏幕。主要属性包括justifyContent、alignItems、direction和wrap,适用于导航栏、侧边栏和表单等多种场景。示例代码展示了如何使用这些属性创建美观的布局。
175 10