布局实践 overflow 自适应高度

想布一个这样的局

  1.中间那栏在<500px的时候没有滚动条,一旦内容超出出现滚动条;

      2.若右边div高度被内容撑大,左边跟着变高。撑大到足够高的时候滚动条没掉;

  3.中间那栏有个border-right,不能因为左边太短或者右边太长之类的出现断层

 

思路一

  按一般的布局方式,写了一个这样的

  css

        * {
            padding: 0;
            margin: 0;
        }
        .div1 {
            height: 500px;
            width: 200px;
            background: red;
            float: left;
        }
        .div2 {
            width: 300px;
            background: yellow;
            float: left;
            /*margin-left: 200px;*/
        }
        .div3 {
            margin-left: 500px;
            background: blue;
        }

        .div22 {
            min-height: 500px;     
        }
        .div33 {
            height: 300px;
        }

body

<div>
        <div class="div1"></div>
        <div class="div2">
            <div class="div22"></div>
        </div>
        <div class="div3">
            <div class="div33"></div>
        </div>
    </div>

但是无论怎么调中间和右边的内容高度,中间都不会出现滚动条。

原因是:中间那栏float了,没法跟着父元素的大小自适应

 

解决:给父元素clearfix

另外,利用负外边距的特性。代码为下

* {
            padding: 0;
            margin: 0;
        }
        .div1 {
            height: 500px;
            width: 200px;
            background: red;
            float: left;
        }
        .div2 {
            width: 300px;
            /*background: yellow;*/
            float: left;
            /*这两行能保证中间高度最低为500(意味着border最低也有500px高度),但border会随着包裹的内容增高而增高*/
            min-height: 5000px;
            margin-bottom: -4500px;  
            /*要是没有这个,页面就会有5000px的高度*/
            overflow: auto;
            border-right: 2px solid black; 
        }
        .div3 {
            margin-left: 502px;
            background: blue;
        }

        .div22 {
            height: 500px;
            background: green;
        }
        .div33 {
            height: 900px;
        }
        .clearfix:after {
            content : ".";
            height : 1px;
            display : block;
            visibility : hidden;
            clear : both;
        }
    
<div class="clearfix">
        <div class="div1"></div>
        <div class="div2">
            <div class="div22"></div>
        </div>
        <div class="div3">
            <div class="div33"></div>
        </div>
    </div>

更改div2的margin-bottom可以保证border的最短高度(当然,如果短于屏幕高度的话它会延伸至整个屏幕高度,这点不太好);

更改div22的height可以试验页面是否会撑大,border是否跟着变大(完了居然不能);

更改div33的height可以试验页面是否会撑大,border是否跟着变大(这个可以);

 

感觉这种效果不是很好。而且左边没有滚动条

 

思路2 中间栏利用绝对定位

  

转载于:https://www.cnblogs.com/cjy1993/p/3915209.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Hook是React 16.8版本引入的一种新的特性,它可以让你在不编写类组件的情况下使用状态和其他React特性。而自适应高度是指根据内容的变化,动态地调整元素的高度。 在React中实现自适应高度可以使用useState和useEffect这两个常用的Hook。首先,你可以使用useState来定义一个状态变量来保存元素的高度。然后,使用useEffect来监听内容的变化,并在内容变化时更新元素的高度。 下面是一个示例代码,展示了如何使用React Hook实现自适应高度: ```jsx import React, { useState, useEffect } from 'react'; function AutoHeightComponent() { const [content, setContent] = useState(''); const [height, setHeight] = useState(0); useEffect(() => { // 监听内容变化 setHeight(document.getElementById('content').scrollHeight); }, [content]); return ( <div> <textarea id="content" value={content} onChange={(e) => setContent(e.target.value)} /> <div style={{ height: `${height}px`, overflow: 'auto' }}> {content} </div> </div> ); } ``` 在上面的代码中,我们使用useState定义了两个状态变量:content用于保存文本内容,height用于保存元素的高度。然后,使用useEffect监听content的变化,并在内容变化时更新元素的高度。 在返回的JSX中,我们将textarea和展示内容的div放在一个父容器中,并设置div的高度为动态计算得到的height值。这样,当文本内容变化时,div的高度会自动调整以适应内容的变化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值