【问题标题】:Adjusting flex Footer position (with "translatedY" child elements) on a responsive website在响应式网站上调整 flex 页脚位置(带有“translatedY”子元素)
【发布时间】:2016-10-28 15:40:49
【问题描述】:

我正在尝试使用这些前提制作一个粘性页脚:

  • 页脚位置:固定;
  • 它的全局高度根据:
    • 用户添加了多少子 .sub-menu 项(可能会有所不同)
    • 媒体查询(改变字体大小)
    • 字体大小(归属于视口单位“vw”)

有两个特定的媒体实例可以改变字体大小:

  • 针对 980 像素以下设备/屏幕的媒体查询
  • 一个用于 1550 像素以上的设备/屏幕

我试图将页脚始终定位在页面底部,同时使其子元素出现在其上方。然而 .sub-menu 项目的数量迫使页脚增加高度;好像这还不够,视口宽度正在改变字体大小,这也会影响元素的高度。

h1 {
font-size: 4vw;
letter-spacing: 0.02em;
}
h2, h3, ul.sub-menu {
	font-size:2.3vw;
	 line-height: 1.4em;
	color: black;
}

.footermenu {
        bottom:0vh;
        left:0vw;
        position: fixed;
        width: 95vw;
        padding-right: 5vw; 
    	height: 55vh; /*this seems to help but it is not reliable enough*/
    	z-index:999; 
    }

    .footermenu ul { 
        justify-content: space-between; 
        display: flex;
    }

    .menu-item > ul.sub-menu {  
        padding: 1vh;
        text-align: center;
        flex-direction: column;
        opacity: 1;
        transition: 0.5s ease-out;
    }

    .menu > .menu-item:not(:first-child):not(:last-child), .menu-item:not(:first-child):not(:last-child) > ul.sub-menu {  
        text-align: center !important;
    flex: 0 1 33%;
    -webkit-flex: 0 1 33%;
    }

    .menu > .menu-item:first-child, .menu-item:first-child > ul.sub-menu {  
        text-align: left !important;
    flex: 0 1 33%;
    -webkit-flex: 0 1 33%;
    }

    .menu > .menu-item:last-child, .menu-item:last-child > ul.sub-menu {  
        text-align: right !important;
    flex: 0 1 33%;
    -webkit-flex: 0 1 33%;
    }
    
    /* from here on I am translating the sub-menu items up */

    .footermenu .menu-item:not(:first-child):not(:last-child) > ul.sub-menu {  
    -webkit-transform: translateY(calc(-100% - 15vh));
        transform: translateY(calc(-100% - 15vh));
    }

    .footermenu .menu-item:first-child > ul.sub-menu {  
    -webkit-transform: translateY(calc(-100% - 15vh));
        transform: translateY(calc(-100% - 15vh));
    }

    .footermenu .menu-item:last-child > ul.sub-menu {  
    -webkit-transform: translateY(calc(-100% - 15vh));
        transform: translateY(calc(-100% - 15vh));
    }

@media screen and (max-width: 980px) {
       	 h1 	{
            	font-size:6vw;
    		letter-spacing: 0.02em;
       		 }
       	 h2, h3, ul.sub-menu a {
    		font-size:3.6vw;
    	 	line-height: 1.2em;
    		color: black;
    		}
   
 	
    	#content {
    		margin: auto;
    		width: 68vw
    		margin-top: 25vh;
    		}
    
    }
@media screen and (min-width: 1550px) {
       	 h1 	{
            	font-size:3.5vw;
                letter-spacing: 0.02em;
       		 }
       	 h2, h3, ul.sub-menu a {
    		font-size:2.3vw;
    	 	line-height: 1.2em;
    		color: black;
    		}
    	.post .entry-content {
    		margin-top: 1.5em;
    		text-align:left;
    		-webkit-column-count:1; /* Chrome, Safari, Opera */
       		 -moz-column-count: 1; /* Firefox */
        		column-count: 1;
    		}
    	.footermenu  {
    		z-index:999;		
    		height: 18vh!important; /*I am trying to fix the problem like this  but as said before this is not safe */
    		}
       .post .entry-content { 
    	-webkit-column-count: 3; /* Chrome, Safari, Opera */
        	-moz-column-count: 3; /* Firefox */
        	column-count: 3;
    	}	
    	#content {
    	margin: auto;
    	width: 68vw;
    	margin-top: 25vh;
    	}
    }
 <div id="footer">
    <h1>  
        <div class="footermenu"> 
            <ul id="menu-footer-menu" class="menu">
                <li class="menu-item"><a href="url_4">Contact</a>
              <ul class="sub-menu">
                        <li class="menu-item"><a href="url_6_a">More  Landscapes</a></li>
                <li class="menu-item"><a href="url_6_b">Collection</a></li></ul>
              </li>
                <li class="menu-item"><a href="url_5">Links</a>
              <ul class="sub-menu">
                        <li class="menu-item"><a href="url_6_a">More Landscapes</a></li>
                        <li class="menu-item"><a href="url_6_b">Collection</a></li>
                        <li class="menu-item"><a href="url_6_c">Brave New</a></li>
                        <li class="menu-item"><a href="url_6_d">Line Three</a></li>
                        <li class="menu-item"><a href="url_6_e">Mary's World</a></li>
                    </ul>
              </li>
                <li class="menu-item"><a href="url_6">About</a>
                    <ul class="sub-menu">
                        <li class="menu-item"><a href="url_6_a">More  Landscapes</a></li>
                        <li class="menu-item"><a href="url_6_b">Collection</a></li>
                        <li class="menu-item"><a href="url_6_c">Brave New</a></li>
                        <li class="menu-item"><a href="url_6_d">Line Three</a></li>
                        <li class="menu-item"><a href="url_6_e">Mary's World</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </h1>
 </div><!-- end of #footer --> 

无论总和菜单项的数量、视口尺寸和字体大小如何,您能帮我将此页脚始终放在同一位置吗?

wordpress 引擎的 php 方法也是受欢迎的。 总而言之: 我正在尝试以父菜单项出现在其子项之后的方式更改页脚菜单的 html 顺序。我已经使用 CSS“transform: translateY(n)” 完成了它,但这并不能完全解决我的问题,因为这种方法有太多变量。 非常感谢。

【问题讨论】:

    标签: html css flexbox parent-child viewport-units


    【解决方案1】:

    如果不详细说明您非常详细的要求,我认为您本质上希望菜单是自下而上的。

    由于您使用的是 flexbox,因此只需使用 flex-direction:column-reverse

    一个一般的例子。

    * {
      margin: 0;
      padding: 0;
    }
    a {
      color: black;
      text-decoration: none;
    }
    ul {
      list-style: none;
    }
    #footer {
      position: fixed;
      bottom: 0;
      width: 100%;
      background: pink;
    }
    .footermenu {
      display: flex;
      justify-content: space-between;
    }
    .footermenu #menu-footer-menu {
      display: flex;
      flex: 1;
      justify-content: space-around;
      text-align: center;
    }
    #menu-footer-menu > li > a {
      color: red;
    }
    .menu-item {
      display: flex;
      flex-direction: column-reverse;
      flex: 1;
    }
    <div id="footer">
      <div class="footermenu">
        <ul id="menu-footer-menu" class="menu">
          <li class="menu-item"><a href="url_4">Contact</a>
    
            <ul class="sub-menu">
              <li class="menu-item"><a href="url_6_a">More  Landscapes</a>
              </li>
              <li class="menu-item"><a href="url_6_b">Collection</a>
              </li>
            </ul>
          </li>
    
          <li class="menu-item"><a href="url_5">Links</a>
    
            <ul class="sub-menu">
              <li class="menu-item"><a href="url_6_a">More Landscapes</a>
              </li>
              <li class="menu-item"><a href="url_6_b">Collection</a>
              </li>
              <li class="menu-item"><a href="url_6_c">Brave New</a>
              </li>
              <li class="menu-item"><a href="url_6_d">Line Three</a>
              </li>
              <li class="menu-item"><a href="url_6_e">Mary's World</a>
              </li>
            </ul>
          </li>
          <li class="menu-item"><a href="url_6">About</a>
            <ul class="sub-menu">
              <li class="menu-item"><a href="url_6_a">More  Landscapes</a>
              </li>
              <li class="menu-item"><a href="url_6_b">Collection</a>
              </li>
              <li class="menu-item"><a href="url_6_c">Brave New</a>
              </li>
              <li class="menu-item"><a href="url_6_d">Line Three</a>
              </li>
              <li class="menu-item"><a href="url_6_e">Mary's World</a>
              </li>
            </ul>
          </li>
        </ul>
      </div>
    </div>
    <!-- end of #footer -->

    【讨论】:

    • 就是这样。非常感谢。
    【解决方案2】:

    我认为您不需要在这里使用转换。只需在页脚菜单的主菜单标题&lt;a&gt; 标记之前将子菜单 ul 放在代码中。 menu-footer-menu 中不需要高度,还需要单独将每个主菜单 li 设置为 position:absolute 以使其保持在底部。

    这就是我将您的代码变成的内容。我想这就是你需要的。

    http://codepen.io/Nasir_T/pen/jModxK

    希望这是有道理的。如果需要更多帮助,请告诉我。

    附:我想我帮助你修复了另一个问题中的菜单左、中和右对齐。我不是吗? :)

    【讨论】:

    • 谢谢。 Nasir 会这样做,但不幸的是,html 结构是由 wordpress php 文件动态生成的,需要每隔一段时间更新一次。因此,我无法更改它:它只能在 Wordpress 更新之前起作用。是的,您确实帮助修复了对齐方式。再次感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2012-07-29
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多