代码之家  ›  专栏  ›  技术社区  ›  Robo Robok

绝对定位的柔性盒会不由自主地收缩

  •  0
  • Robo Robok  · 技术社区  · 2 年前

    我正在构建一个顶条样式的菜单,我发现flexbox有问题。

    我的子菜单包含一个具有 flex-basis 。由于某种原因,容器在设置其宽度时似乎忽略了它。在这种情况下,如何避免内容溢出?背景 flex-shrink 在任何一个容器上似乎都无济于事。

    以下是它的外观:

    Menu Bar

    重点是使橙色块与内容物一样宽。

    .menu {
        background-color: red;
        display: flex;
    }
    
    .option {
        background-color: yellow;
        display: flex;
        flex-direction: column;
    }
    
    .submenu-container {
        position: relative;
    }
    
    .submenu {
        background-color: orange;
        flex-shrink: 0;
        left: 0;
        position: absolute;
        top: 0;
        white-space: nowrap;
    }
    
    .submenu-item {
        display: flex;
    }
    
    .icon {
        flex-basis: 40px;
        flex-shrink: 0;
    }
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Menu Bar</title>
        </head>
        <body>
            <div class="menu">
                <div class="option">
                    <div>Option</div>
                    <div class="submenu-container">
                        <div class="submenu">
                            <div class="submenu-item">
                                <div class="icon">x</div>
                                <div>Submenu option</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </body>
    </html>
    0 回复  |  直到 2 年前
        1
  •  0
  •   markfila    2 年前

    我能让它工作的唯一方法是将背景色应用于每个单独的div。我创建了一个optionsComponent类,并添加了背景色橙色。

    <!DOCTYPE html>
    <html>
    <head>
    <style>
    .menu {
        background-color: red;
        display: flex;
    }
    
    .option {
        background-color: yellow;
        display: flex;
        flex-direction: column;
    }
    
    .submenu-container {
        position: relative;
    }
    
    .submenu {
        flex-shrink: 0;
        left: 0;
        position: absolute;
        top: 0;
        white-space: nowrap;
    }
    
    .submenu-item {
        display: flex;
    }
    
    .icon {
        flex-basis: 40px;
        flex-shrink: 0;
    }
    
    .optionComponents{
        background-color:orange;
    }
    </style>
    </head>
    <body>
            <div class="menu">
                <div class="option">
                    <div>Option</div>
                    <div class="submenu-container">
                        <div class="submenu">
                            <div class="submenu-item">
                                <div class="icon optionComponents">x</div>
                                <div class="optionComponents">Submenu option</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </body>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.6.3.slim.min.js"></script>
    <script type="text/javascript">
        $("#ajax_submit_next").submit(function(e){
            e.preventDefault();
            alert("ready");
        });
    </script>
    </html>