gpt4 book ai didi

javascript - 响应式相对元素调整大小 + 响应式文本叠加

转载 作者:行者123 更新时间:2023-12-04 09:15:08 25 4
gpt4 key购买 nike

我在设计基于图像的下拉菜单时遇到了 2 个问题:

  • 无论我尝试多久,我都无法获得 flex ed 容器内的元素保持与相邻元素相同的高度。 [如果你看我的jsFiddle , 悬停显示的每个滑出内容,应与图标高度相同。]
  • 我无法在每张图片上显示文字——我相信这是因为菜单会根据设备宽度自行调整大小——我不能放弃。我看到的所有来源都是基于 position:absolute ,我一直无法上类。 [具体来说,每张图片上面都应该有文字,给它们贴上标签。]

  • 如果需要,请发表评论以获得澄清。
    这是 jsFiddle谢谢。

    最佳答案

    为了清晰和代码回收,CSS 被分为四个主要部分:

  • 全局变量、页面默认值和标准 HTML/CSS 值的覆盖
  • 机制、Flexbox 布局设置和元素大小/操作
  • 引人注目的泛型、间距、字体、边框
  • 令人眼花缭乱的主题,任何与颜色相关的自定义属性[theme="gr-blue"] .可以很容易地与其他主题一起扩展。

  • flex 盒布局
    对于 .slideout-content的左右对齐您可以简单地使用 row-reverse方向和 justify-content: flex-end对于一个奇怪的 .menu-item和默认 row偶数方向 .menu-item 图片文字叠加
    使用标准 position: relativeabsolute父/子元素构造。 child content填充了从 data-overlay 获得的覆盖文本自定义属性。
    备注
  • 该代码有大量注释,并显示了 Flexbox 布局的一些替代用途。
  • 已删除 filter: brightness(1.2)由于 IE11 无法处理此问题,因此需要一些替代方案。
  • 我稍微改变了 .slideout-content 的颜色不透明度显示一些悬停效果。
  • 在适用的情况下,我添加了视口(viewport)取决于大小。
  • 删除了对子 margin 的所有使用并将间距移至父级 padding在适用的情况下。当使用相对大小 ('%') 与 box-sizing: border-box 结合使用时,这一点尤其重要。 ,如 margin将 child 的体型扩大到 100% 以上。
  • 不要使用 flex: 1要允许元素增长,请使用 flex-grow: 1而是用于 IE11。
  • 更改dir="ltr"<body>dir="rtl"测试文档阅读顺序。

  • 已测试 与 Chrome/Edge、Firefox 和 IE11 一起工作,最小尺寸为 320x480 像素,无需滚动。
    更新 1 我忘了说我删除了原来的 footer {...height: 5vh...}它的内容不够高,因此会溢出,在页脚下方创建一个白条。
    如果您不希望页脚(或任何父元素)溢出,它的 height必须至少大于/等于其子项的高度(计算 line-height + padding + border + margin => 是否添加 padding + border 取决于 box-sizing )。
    更新 2 定位叠加 .slideout::after父使用中从顶部和中心的 3/4: .slideout::after { top: 75%; left: 50%; transform: translate(-50%, -50%) } ,我相应地修改了 CSS。查看 w3schools: CSS Layout - Horizontal & Vertical Align有关定位的更多信息。
    片段

    /***********/
    /* GLOBALS */
    /***********/
    html,body { width: 100%; max-width: 100%; height: 100% }

    html { -webkit-box-sizing: border-box; box-sizing: border-box }
    *, *:before, *:after{ -webkit-box-sizing: inherit; box-sizing: inherit }

    /* remove/override default element default */
    html { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% }
    body { margin: 0 }
    ul,li { list-style-type: none; padding: 0; margin: 0 }
    a { text-decoration: none; color: inherit }
    p { margin: 0; padding: 1em 0 }

    /* for debugging (put in <body>) */
    [outlines="1"] * { outline: 1px dashed }

    /*************/
    /* MECHANISM */
    /*************/

    /******************/
    /* Flexbox Layout */
    /******************/

    /* FBL EITHER (specific) */
    /*.wrapper, .touch-menu, .menu-item,
    .menu-item * { display: flex }/**/

    /* FBL OR (generic, if you want to insert elements on-the-fly without classes) */
    div, ul, li, a, img { display: flex }/**/

    /* .wrapper is an FBL column of three main rows, pushed apart */
    .wrapper { flex-direction: column; justify-content: space-between }

    /* .touch-menu fills available space and is a row that wraps its kids */
    .touch-menu { flex-grow: 1; flex-flow: row wrap }

    /*
    Because .menu-item width is 50% there will always be only two in a row,
    simply reverse FBL for first in a row...
    */
    .menu-item:nth-child(odd) { flex-direction: row-reverse } /* reverse row logic */
    .menu-item:nth-child(odd)>* { justify-content: flex-end } /* ditto */

    .slideout-content { flex-grow: 1 } /* grow to fill parent */
    .slideout-content ul { flex-direction: column } /* a column of several rows */

    .touch-menu,.slideout-content *, /* center all content rows/columns */
    .header>*,.footer>* { justify-content: center; align-content: center; align-items: center }
    .footer>* { justify-content: flex-end } /* right align footer rows */

    /**********/
    /* Action */
    /**********/
    .slideout-content { display: none } /* hide, change to 'flex' to verify positioning */

    .slideout:hover+.slideout-content,
    .slideout-content:hover { display: flex } /* show on hover */

    /**********/
    /* Sizing */
    /**********/
    .wrapper { width: 100%; height: 100% }
    .touch-menu { padding: 0 5% }
    /* modify 5% to required need, forces size of entire .menu-item */

    .menu-item { width: 50% } /* of .touch-menu */
    .slideout { width: 50%; position: relative } /* of .menu-item */
    .slideout::after { position: absolute; bottom: 0; left: 0; right: 0 }

    /* UPDATE 2 */
    .slideout::after { top: 75%; left: 50%; transform: translate(-50%, -50%) }


    /* redundant, but > 50% will animate .slideout on hover */
    .slideout-content { width: 50% } /* otherwise: remove */

    /* fill parent */
    .header>*, .footer>*,
    .slideout img { width: 100% }
    .slideout-content * { width: 100%; height: 100% } /* modify to your needs */

    /**********************/
    /* EYE-CANDY generics */
    /**********************/
    .header { border-bottom-style: inset }
    .header .headline { padding: 0.67em 0; font-size: 2.6vw; font-weight: bold }
    .touch-menu .menu-item { padding: 1vh }

    .slideout { cursor: pointer }
    .slideout::after { content: attr(data-overlay); font-size: .75vw; padding: .25vw }

    .slideout-content { font-size: 1.5vw; padding: .25vw; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2) }
    .slideout-content ul * { border-radius: 0.5vw }
    .slideout-content li { padding: .125vw }
    .slideout-content a { border: thin inset }

    .footer { padding: 2.65vmin .75vw; font-size: .75vw; border-top: outset }

    /* ONLY required when 'FBL EITHER' used */
    .header { text-align: center }
    .footer { text-align: right }

    /*********************/
    /* EYE-CANDY theming */
    /*********************/
    body { font-family: "Lato", sans-serif }

    body[theme="gr-blue"] {
    color: GoldenRod;
    /*
    Permalink - use to edit and share this gradient:
    https://colorzilla.com/gradient-editor/#c7d7dd+0,a7cfdf+16,5085a0+57,23538a+100
    */
    background-color: rgb(199,215,221); /* Old browsers */
    background-image: -moz-linear-gradient(top, rgba(199,215,221,1) 0%, rgba(167,207,223,1) 16%, rgba(80,133,160,1) 57%, rgba(35,83,138,1) 100%); /* FF3.6-15 */
    background-image: -webkit-linear-gradient(top, rgba(199,215,221,1) 0%, rgba(167,207,223,1) 16%, rgba(80,133,160,1) 57%, rgba(35,83,138,1) 100%); /* Chrome10-25,Safari5.1-6 */
    background-image: linear-gradient(to bottom, rgba(199,215,221,1) 0%, rgba(167,207,223,1) 16%, rgba(80,133,160,1) 57%, rgba(35,83,138,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */

    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c7d7dd', endColorstr='#23538a',GradientType=0 ); /* IE6-9 */
    }

    [theme="gr-blue"] .header { color: AliceBlue; background-color: #605e5e; border-bottom-color: #888888 }
    [theme="gr-blue"] .footer { background-color:#605e5e; border-color: GoldenRod }

    [theme="gr-blue"] .slideout::after { color: AliceBlue; background-color: rgba(115,110,111,.6) }
    [theme="gr-blue"] .slideout-content { background-color: rgba(115,110,111,.6) } /* #736e6f */
    [theme="gr-blue"] .slideout-content a { border-color: #888585 }
    [theme="gr-blue"] .slideout-content li:hover { background-color: rgba(115,110,111,.6) }
    <body theme="gr-blue" dir="ltr" outlines="0">
    <div class="wrapper">
    <div class="header">
    <div class="headline">Links of Links</div>
    </div>

    <div class="touch-menu">
    <div class="menu-item">
    <div class="slideout" data-overlay="overlay 1">
    <img src="https://avatarfiles.alphacoders.com/105/thumb-105223.jpg" alt="scale">
    </div>
    <div class="slideout-content">
    <ul>
    <li><a href="#">scaleLink 1</a></li>
    <li><a href="#">scaleLink 2</a></li>
    <li><a href="#">scaleLink 3</a></li>
    </ul>
    </div>
    </div>
    <div class="menu-item">
    <div class="slideout" data-overlay="overlay 2">
    <img src="https://avatarfiles.alphacoders.com/105/thumb-105223.jpg" alt="scale">
    </div>
    <div class="slideout-content">
    <ul>
    <li><a href="#">bookLink 1</a></li>
    <li><a href="#">bookLink 2</a></li>
    <li><a href="#">bookLink 3</a></li>
    <li><a href="#">bookLink 4</a></li>
    <li><a href="#">bookLink 5</a></li>
    <li><a href="#">bookLink 6</a></li>
    </ul>
    </div>
    </div>
    <div class="menu-item">
    <div class="slideout" data-overlay="overlay 3">
    <img src="https://avatarfiles.alphacoders.com/105/thumb-105223.jpg" alt="scale">
    </div>
    <div class="slideout-content">
    <ul>
    <li><a href="#">ugavelLink 1</a></li>
    <li><a href="#">ugavelLink 2</a></li>
    <li><a href="#">ugavelLink 3</a></li>
    <li><a href="#">ugavelLink 4</a></li>
    </ul>
    </div>
    </div>
    <div class="menu-item">
    <div class="slideout" data-overlay="overlay 4">
    <img src="https://avatarfiles.alphacoders.com/105/thumb-105223.jpg" alt="scale">
    </div>
    <div class="slideout-content">
    <ul>
    <li><a href="#">lgavelLink 1</a></li>
    <li><a href="#">lgavelLink 2</a></li>
    <li><a href="#">lgavelLink 3</a></li>
    </ul>
    </div>
    </div>
    </div>

    <div class="footer">
    <div>
    Powered by <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=emb_logo" target="_blank">Barack Obama</a>
    </div>
    </div>
    </div>
    </body>

    关于javascript - 响应式相对元素调整大小 + 响应式文本叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63257695/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com