[js]css导航栏细究

a元素(行内元素)操作思想1–导航栏li>a

  • 1,转块–display:block
  • 2,设宽–即使设置了宽度也会独占一行
  • 3,浮动
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .a1{
            display: block;
            width: 200px;
            float: left;
        }
        .a2{
            display: block;
            width: 100px;
            float: left;
        }
    </style>
</head>
<body>
<a href="" class="a1">a1</a>
<a href="" class="a2">a2</a>
<a href="" class="a3">a3</a>
</body>

a元素(行内元素)操作思想2

  • 1,转块–display: inline-block
  • 2,设宽–inline-block不会独占一行
    好处: 减免了浮动操作
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
            display: inline-block;
        }
    </style>
</head>
<body>
<a href="" class="a1">a1</a>
<a href="" class="a2">a2</a>
</body>

转块 display block

  • 行内元素转块了,即使设置了宽度,还是单独占一行,除非浮动
  • display:inline-block既可以设置宽和高,又可以设置

导航菜单实例–最佳代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .nav{
            width: 960px;
            height: 50px;
            background-color: black;
            margin: 0 auto;
        }
        .nav ul{
            list-style: none;
        }
        .nav ul li{
            float: left;
        }
        .nav ul li a{
            display: inline-block;
            height: 50px;
            font: 400 15px/50px "微软雅黑";
            padding: 0 20px;
            text-decoration: none;
            color: yellow;
        }
    </style>
</head>
<body>
    <div class="nav">
        <ul>
            <li><a href="#">导航菜单</a></li>
            <li><a href="#">导航菜单</a></li>
            <li><a href="#">导航菜单</a></li>
            <li><a href="#">导航菜单1234</a></li>
            <li><a href="#">导航菜单12345</a></li>
            <li><a href="#">导航菜单</a></li>
        </ul>
    </div>
</body>
</html>

1.整体思路

  • 1.设置宽高背景–居中对齐
  • 2.ul>li左浮动
  • 3.ul>li>a转块,设高(撑开父亲li),设置字体大小行高使居中.
  • 4.a设置padding左右使有间距

2.nav不给高度,a撑不开,为什么?–子浮动,撑不开父 nav(ul)>li

因为a的父li浮动了. 此处a可以撑开li,但是由于li浮动了,无法撑开父.

3.父亲浮动了,子还可以撑高父吗?—父浮动,子可以撑开父 li>a

可以,因为只有父设置了高度,子才没法撑开他.

4.a元素此处使用inline-block和block有啥区别吗?

他们本身是有区别的,行捏元素经过block后,即使设置宽度也会独占一行,除非float.而经过inline-block处理则不会独占一行.免去了float.
然而在此处没啥区别. a的父li,这里是一父一子的形式,,
- 使用inline-block会自适应内容
- 使用 block 会填满li的宽度,独占一行

然而这里li没设置宽,即li的宽度是由a的内容撑大的.所以没区别

盒子加了padding后会被撑大

  • 盒子里套盒子,可以用父盒子调整子盒子的位置
  • 如果加了padding,但是不希望父盒子变大,则需要减少宽高

研究一下padding

  • h3加padding-top padding-left, 发生位移
  • 盒子即使设置了宽高,加padding 自动撑大
  • 盒子加了宽高,子盒子无法撑大他. 子盒子使用padding可以发生出父盒子.

盒子加padding

  • 盒子加padding调整内容的位置.一般是调整上下,即使撑大也撑大的是上下,本来内容就是要被撑大的
  • 父定位子
  • 子自己定位

垂直居中问题:文本在盒子里要居中

  • 单行文字居中: line-height = div的高度
  • 多行文本居中: 使用padding
    • padding-top=(盒子高度-总行高)/2
    • 总高度-(盒子高度-总行高)/2 ,如果不减少盒子会被撑大

水平居中问题: text-align: center;-只是针对块级元素

对块级元素居中直接生效

h1 {text-align: center}

对行内元素-情况1-需要将其转块后居中

<head>
    <title>Document</title>
    <style>
        a{
            display: inline-block;
            width: 400px;
            text-align: center;
            background-color: pink;
        }
    </style>
</head>
<body>
<h1>this is h1</h1>
<a href="">this is an a</a>

对行内元素-情况2,如a,需要把a放到块级元素里才能将它居中.

<head>
    <title>Document</title>
    <style>
        .box1{
            width: 200px;
            background-color: red;
            text-align: center;
        }
    </style>
</head>
<body>
<h1>this is h1</h1>
<div class="box1"><a href="">this is an a </a></div>
</body>

盒子撑开问题:

盒子里套盒子,
- 外盒子一旦设置了高度,里面的不会撑大
- 外盒子不设高度,则里面盒子高度会撑大外盒子

float

  • 行内元素float后,自动转块,可以设置宽高了.如a.
  • 2个盒子float第二个—相当于把自己当前位置腾开了
  • 绝对定义–脱标,相对原来位置top left

相对定位:

  • 原来位置定位,还占着,形影分离,能看到的是幻象
  • 不脱标
  • 形影分离,能看到的是幻象,使用margin和padding操作的是他本身位置,不是影子.
  • 使用时候: top:10px,是向下移动,反着的.
  • 作用: 微调元素,如input和按钮之间的位置.

绝对定位

  • 一旦使用定位,则即使行内元素也可以设置高宽
  • 会脱标
  • 相对于页面左上角定位
  • 滚动滚轮经过绝对定位的盒子可以被卷动走.因为参考点是页面右上角
  • 如果使用bottom描述,那么就是浏览器首屏窗口尺寸对应的左下角.

绝对定位后

  • 原来的块级元素不在是块级了 不可以居中.居中方法: left 50%; margin-left: -宽度的一半.
        .box1{
            height: 200px;
            width: 200px;
            background-color: red;
            position: absolute;
            left: 50%;
            margin-left: -100px;
        }

脱标方法

浮动 绝对定位 固定定位

固定定位

  • 做固定的nav
  • 做返回顶部

显示隐藏的区别

overflow: hidden;
    溢出隐藏
visibility: none;
    隐藏元素
        隐藏后还会占据原来位置
display: none;
    隐藏元素
        隐藏后不会占据原来位置
display: block;
    元素可见

次日小结:

padding布局

1.一个盒子 padding定位自己里的内容

一般设padding-top,会撑开

2.父子盒子,父盒子给子盒子定位内容

父设置padding-top padding-left 同样被撑大.

3.父盒子-子盒子, 子盒子设置padding定位自己位置

父盒子不变,子盒子变大.   

4.父盒子-子盒子–子子盒子,子盒子,子盒子定位子子盒子的内容

<head>
    <meta charset="utf-8">
    <style>
        /* 大盒子 */
        .box1{
            width: 200px;
            height: 200px;
            background-color:pink;
        }
        /* 子盒子 
            目的就是为了定位子子盒子*/
        .box1 .box11{
            /* 子盒子的宽度让充满父盒子 */
            width: 50px; 
            height: 100px;
            /* 待子子盒子位置位置通过padding调整好后这个子盒子颜色干掉. */
            /* background-color: green; */
            padding-top: 50px;
            padding-left: 50px;
        }
        /* 子子盒子 */
        .box1 .box11 .box111{
            width: 50px;
            height: 50px;
            background-color: yellow;
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box11">
        <div class="box111">12</div>
    </div>
</div>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值