ife(7-9)

一.定位元素
1.定位
absolute:相对于定位(定位不为static)的父元素定位,如果父元素均无定位,则以body为父元素;
fixed:相对浏览器定位;
relative:相对元素本身定位;
sticky:相对位置和固定定位的混合体:先是相对定位,等到滚动到一定的位置(top或者bottom)就会变成固定定位;

2.定位特点:
同级定位元素之间使用z-index设置级别;默认为0;如果父元素的z-index有效,那么子元素无论是否设置z-index都和父元素一致,会在父元素上方;如果父元素z-index失效(未定位或者使用默认值0),那么定位子元素的z-index设置生效,如果值小于父元素就被覆盖;

3.简单的tab切换:

    <style>
    *{
         margin: 0;
         padding: 0;
     }
    a{
        padding:20px 60px;
        color:#fff;
        background-color: #f00;
        text-decoration: none;
    }
    .con{
        position: fixed;
        text-align: center;
        background-color: #710d0a;
        width: 510px;
    }
    .active{
        background-color: #710d0a;
    }
    .con ul,.con ol{
        list-style:none;
        width: 100%;
    }
    .con li{
        float: left;
    }
    .con a{
        width:50px;
        display: inline-block;
    }
    ul::after{
        content: '';
        height: 0;
        visibility: hidden;
        display: block;
        clear: both;
        zoom:1;
        // 或者浮动父元素overflow:auto;zoom:1;
    }
        .panels{
            position: relative;
            width: 100%;
        }
    .panels > .panel{
        position: absolute;
        top:0;
        left: 0;
        height: 250px;
        background-color: #710d0a;
        color:#fff;
        padding:0 30px;
    }
    .panel:first-child{
        z-index: 1;
    }
        .panel h2{
            margin:20px 0;
        }
        .panel > p{
            text-align: left;
        }
    .panel li{
        line-height: 20px;
    }
    </style>
</head>
<body>
    <div class="con">
        <ul>
            <li><a href="#" class="active">Tab1</a></li>
            <li><a href="#">Tab2</a></li>
            <li><a href="#">Tab3</a></li>
        </ul>
        <div class="panels">
            <div class="panel">
                <h2>The first tab</h2>

                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. Vestibulum et orci scelerisque, vulputate tellus quis, lobortis dui. Vivamus varius libero at ipsum mattis efficitur ut nec nisl. Nullam eget tincidunt metus. Donec ultrices, urna maximus consequat aliquet, dui neque eleifend lorem, a auctor libero turpis at sem. Aliquam ut porttitor urna. Nulla facilisi.</p>
            </div>
            <div class="panel">
                <h2>The second tab</h2>

                <p>This tab hasn't got any Lorem Ipsum in it. But the content isn't very exciting all the same.</p>

            </div>
            <div class="panel">
                <h2>The third tab</h2>

                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. And now an ordered list: how exciting!</p>

                <ol>
                    <li>dui neque eleifend lorem, a auctor libero turpis at sem.</li>
                    <li>Aliquam ut porttitor urna.</li>
                    <li>Nulla facilisi</li>
                </ol>
            </div>
        </div>
    </div>
    <script>
        // let panels = document.querySelector('.panels');
        // let ul = document.querySelector('ul');
        // let arr = [];
        // ul.addEventListener('click',clickfn);
        // function clickfn(e) {
        //     if(e.target.constructor === HTMLUListElement) return;
        //     for(let i =0;i<ul.children.length;i++){
        //         let el = ul.children[i];
        //         arr.push(el);
        //         removeClass(el.firstElementChild,'active');
        //     }
        //     addClass(e.target,'active');
        //     let index = arr.indexOf(e.target.parentNode);
        //     showPanel(index);
        // }
        // function removeClass(el,classname) {
        //     let classlist = el.className.split(/\s/g);
        //     let idx = classlist.indexOf(classname);
        //     if(idx > -1){
        //         classlist.splice(idx,1);
        //         if(!classlist.length){
        //             el.removeAttribute('class');
        //         }else{
        //             el.className = classlist.join(' ');
        //         }
        //     }
        // }
        // function addClass(el,classname) {
        //     if(!el.className){
        //         el.className = classname;
        //         return;
        //     }
        //     let classlist = el.className.split(/\s/g);
        //     let idx = classlist.indexOf(classname);
        //     if(idx > -1){
        //         return;
        //     }
        //     classlist.push(classname);
        //     el.className =(classlist.length===1)?classlist.join(''):classlist.join(' ');
        // }
        // function showPanel(index) {
        //     for(let i =0;i<panels.children.length;i++){
        //         panels.children[i].style.zIndex = '0';
        //     }
        //     panels.children[index].style.zIndex = '1';
        // }
        let panels = document.querySelector('.panels');
        let ul = document.querySelector('ul');
        let arr = [];
        ul.addEventListener('click',clickfn);
        function clickfn(e) {
            togglePanel(e.target)
        }
        function removeClass(el,classname) {
            let classlist = el.className.split(/\s/g);
            let idx = classlist.indexOf(classname);
            if(idx > -1){
                classlist.splice(idx,1);
                if(!classlist.length){
                    el.removeAttribute('class');
                }else{
                    el.className = classlist.join(' ');
                }
            }
        }
        function togglePanel(elem) {
            if(elem.constructor === HTMLUListElement) return;
            for(let i =0;i<ul.children.length;i++){
                let el = ul.children[i];
                el.index = i;
                // el.setAttribute('index',i);
                removeClass(el.firstElementChild,'active');
            }
            addClass(elem,'active');
            // let index = e.target.parentElement.getAttribute('index')
            let index = elem.parentElement.index;
            showPanel(index);
        }
        function addClass(el,classname) {
            if(!el.className){
                el.className = classname;
                return;
            }
            let classlist = el.className.split(/\s/g);
            let idx = classlist.indexOf(classname);
            if(idx > -1){
                return;
            }
            classlist.push(classname);
            el.className =(classlist.length===1)?classlist.join(''):classlist.join(' ');
        }
        function showPanel(index) {
            for(let i =0;i<panels.children.length;i++){
                panels.children[i].style.zIndex = '0';
            }
            panels.children[index].style.zIndex = '1';
        }
    </script>
    </body>

二,flex布局
详细链接:https://www.runoob.com/w3cnote/flex-grammar.html
如果有三个flex的行,要想让所有flex行中的每个flex项都有相同的距离,给每个flex项设置相同的margin-left和margin-right,并设置flex:1,在flex项中设置display:flex,justify-content:center,align-items:center可以让flex项中的元素或者文本居中。

// 父元素
.parent{
	display:flex;// display:inline-flex;
	flex-direction:column // row  row-reverse  column-reverse 设置主轴方向
	justify-content:center // 主轴居中排列
	flex-wrap:wrap // 换行 
	// flex-flow:row wrap  // 是flex-direction和flex-wrap的缩写
	align-items:center //stretch  center  flex-start flex-end 交叉轴居中排列  默认stretch,沿交叉轴延伸填充父容器,如果没有设定固定值,则跟最长的flex项一样长
}
.son{
	flex:200px; // 每个子元素最少宽度为200px   数字 表示占几份
	// flex:1 200px;每个flex项会先给出200px空间,剩余可用空间根据分配比例分享
	// flex:flex-grow flex-shrink flex-basis
	align-self:baseline;// 覆盖父元素的align-items
	order:1 //  所有的flex项默认为0  order值大的显示在更后面,可以用负值
}

三:内联块:
1.内联块之间产生距离:
1》使用font-size:0;
2》使用float;
3》使用block
2.使ie支持内联块:
zoom:1;// 触发IE的haslayout
display:inline-block;
*display:inline;

3.垂直居中几种方法:
1》flex布局

  justify-content:center;
  align-items:center;

2》行内块/行内元素

   text-align:center;
   line-height;

3》行内块元素

  // 父元素设置
  display:table-cell;
  text-align:center;
  vertical-align:middle;
  // 子元素
  display:inline-block;

4》块元素

   margin:值 auto;

5》父元素固定高,块级子元素没有固定高

   //父元素设置
   display:table-cell;
   vertical-align:middle;

6》绝对/固定定位元素

   position:absolute;// fixed
   top:0;
   left:0;
   right:0;
   bottom:0;
   width:200px;
   margin:auto;
  ------------------------------
   positon:absolute
   left:50%;
   top:50%;
   transform:translate(-50%,-50%);// margin-left

布局【固定宽度和不固定宽度】:
1.脱离文档流【float、position】+正常文档流【margin、padding】
2.脱离文档流【float】+脱离文档流【float】
3.flex
4.脱离文档流【float】+BFC【overflow等】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
折叠面板是一个常见的 UI 组件,可以在 Web 页面上实现内容的展开与收缩。以下是一个 HTML 右边折叠面板的实现示例: HTML 代码: ```html <div class="panel-container"> <div class="panel-header"> <h3>折叠面板标题</h3> <span class="panel-arrow"></span> </div> <div class="panel-content"> <p>折叠面板内容</p> </div> </div> ``` CSS 代码: ```css .panel-container { position: relative; width: 400px; height: 100%; } .panel-header { position: relative; z-index: 1; height: 40px; background-color: #f0f0f0; border-bottom: 1px solid #d9d9d9; cursor: pointer; } .panel-header h3 { margin: 0; padding: 0 20px; line-height: 40px; font-size: 16px; font-weight: bold; color: #333; } .panel-arrow { position: absolute; top: 50%; right: 20px; width: 0; height: 0; margin-top: -5px; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid #999; transition: transform 0.3s ease; } .panel-content { position: absolute; top: 40px; right: 0; z-index: 0; width: 0; height: 0; overflow: hidden; background-color: #fff; transition: width 0.3s ease; } .panel-container.active .panel-header .panel-arrow { transform: rotate(180deg); } .panel-container.active .panel-content { width: 300px; height: 300px; } ``` 解释: 1. `.panel-container` 设置容器的宽度和高度,并设置为相对定位,以便内部元素进行定位。 2. `.panel-header` 设置折叠面板的标题栏样式,包括高度、背景色、边框和光标样式。 3. `.panel-header h3` 设置标题栏标题的样式,包括字体大小、颜色和粗细等。 4. `.panel-arrow` 设置标题栏右侧的箭头样式,包括定位、大小和颜色等。使用 `transition` 属性实现箭头旋转效果。 5. `.panel-content` 设置折叠面板的内容区样式,包括定位、大小、背景色和过渡效果等。使用 `overflow: hidden` 属性隐藏内容超出部分。 6. `.panel-container.active .panel-header .panel-arrow` 和 `.panel-container.active .panel-content` 通过 `.active` 类实现面板的展开和收缩效果。 以上是一个简单的 HTML 右边折叠面板的实现示例。可以根据实际需求调整样式和布局。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值