【问题标题】:Why does the -webkit-box-flex property not work on this?为什么 -webkit-box-flex 属性对此不起作用?
【发布时间】:2013-03-03 05:27:15
【问题描述】:

我正在制作一个网站,我制作了一些按钮并向它们添加了 -webkit-box-flex 属性。它工作得很好。但是,当我向其中一个按钮添加下拉菜单时,-webkit-box-flex 属性不再适用于它们并且它不起作用。谁能告诉我这是怎么回事?

这是一个 jsfiddle:

http://jsfiddle.net/hGT6E/

*{
margin: 0px;
padding: 0px;
 }

h1{
font: bold 20px PrimaSans BT;
 }

 h2{
font: italic 14px PrimaSans BT;
  }

header, section, footer, aside, nav, article, hgroup, ul, li{
 display: block;
 }

 #wrapper{
max-width: 1000px;
margin: 20px 0px;
display: -webkit-box;
display: -moz-box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;

-webkit-box-flex: 1;
-moz-box-flex: 1;
margin-left: auto ;
margin-right: auto ;
}

#searchbox{
float: right;
margin-bottom: 10px;
}

body{
width: 100%;
margin: 0;
display:-moz-box;
-moz-box-pack: center;
display:-webkit-box;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0,    `enter code here`#ffffff), color-stop(1, #bababa));
background-image: -moz-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));
background-repeat: no-repeat;
background-attachment: fixed;
  }

 #navigation{
display: block;
padding: 10px;
margin: 5px;
margin-bottom: 0px;
-webkit-border-radius: 15px;
width: 800px;
height: 60px;
display: -webkit-box;
-webkit-box-orient: horizontal;
display: -moz-box;
-moz-box-orient: horizontal;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));
background-image: -moz-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));

 }

 #navigation li:hover ul{
display: block;
 }

 #navigation ul{
margin: 0px;
padding: 0px;
 }

 #navigation li{
position: relative;
float: left;
list-style-type: none;
 }

 #navigation ul:after{
display: block;
clear: both;
visibility: hidden;
 }

  #navigation li a{
text-decoration: none;
display: block;
color: black;
border-right: 1px solid grey;
padding: 10px 25px;

 }

  #navigation ul ul{
position: absolute;
border: 20px;
left: 0px;
width: 125px;
display: none;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));
  }

  #navigation ul ul li{
border: 1px solid grey;
width: 99%;
-webkit-transition: background 2s
  }

   #navigation ul ul li:hover{
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#fffc01), color-stop(1, #ffde00));
  }

 #navigation ul ul li a{
border-right: none;
  }

  .navigation_button{
font: bold 18px PrimaSans BT;
-webkit-box-flex: 1;
width: 100px;
padding: 10px;
margin: 10px;
text-align: center;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));
background-image: -moz-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#ffffff), color-stop(1, #bababa));
-webkit-border-radius: 10px;
-webkit-transition: -webkit-transform 2s, opacity 2s, background 2s, scale 2s,
  }

   .navigation_button:hover{
-webkit-transform: scale(1.05);
opacity: 1;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#fffc01), color-stop(1, #ffde00));
background-image: -moz-gradient(linear, left top, left bottom, color-stop(0, `enter code here`#fffc01), color-stop(1, #ffde00));
 }

 #main_section{
border: 1px solid grey;
width: 750px;
margin-left: 40px;
margin-right: 30px;
border-top: 0px;
height: 800px;
margin-bottom: 10px;
-webkit-border-bottom-right-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
background-color: #f1f1f1;
-webkit-box-flex: 1;
 }

 .article_1{
border: 1px solid gray;
background: white;
-webkit-box-flex: 1;
margin-left: 10px;
margin-right: 10px;
margin-top: 10px;
padding: 10px;
  }

  .article_1_footer{
text-align: right;
  }

  #footer{
text-align: center;
font: italic 12px Times New Roman
  }

谢谢!

【问题讨论】:

  • 您尝试将box-flex 属性应用于哪个元素?它不在小提琴中。您确实知道这些属性来自正在逐步淘汰的旧规范,对吗? gist.github.com/cimmanon/727c9d558b374d27c5b6
  • 我将其添加到 .navigation_button
  • 我建议找到一个新策略,而不是使用这个正在逐步淘汰的 flexbox 规范。
  • @AdamMiszczak 您的预期行为是什么?我可以告诉你为什么它什么也没做,但我不知道你最初认为它会做什么。
  • 好吧,就像所有其他具有 flex-box 属性的元素一样,我希望这些框的大小能够填满它们所在的 div 的所有空间。但是,在将下拉菜单系统添加到其中一个盒子,它会停止这样做。

标签: css html webkit flexbox


【解决方案1】:

box-flex 属性(现代名称:flex)仅适用于 弹性项目。为了成为一个弹性项目,它的父元素必须是一个弹性容器(显示值为box/flexbox/flex)。 .navigation_button 元素的父元素是ul#nav_menu,它的显示类型是块。

http://jsfiddle.net/hGT6E/1/

#nav_menu {
    display: -webkit-box;
    width: 100%;
}

我必须告诫不要依赖这些可用的属性。它们来自 2009 年的 Flexbox 规范,并且可能会在不久的将来被删除。如果您需要它们来支持旧的移动浏览器,请确保您还为每个属性提供现代版本。

【讨论】:

  • 感谢您的修复和有用的信息。我会阅读新规范。
【解决方案2】:

就像 Cimmanon 之前解释的那样,

#parent {
    /* the parent has to be setup */
    display: -webkit-box;
    display: -moz-box;
    display: -o-box;
    display: box;
}

#child {
    /* for the child to behave correctly */
    -webkit-flex-box: 1;
    -moz-flex-box: 1;
    -o-flex-box: 1;
    flex-box: 1;
}

您是在不受支持的浏览器中查看它吗?

可能缺少某些特定于供应商的前缀(相对于您的浏览器可访问性范围)。

这是一些使用 flex 的新学校示例方法(从 bennettfeely.com/flexplorer 生成);

.flex-container {
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flex;
    display: flex;
    -webkit-flex-flow: row wrap;
    -moz-flex-flow: row wrap;
    -ms-flex-direction: row;
    -ms-flex-wrap: wrap;
    -ms-flex-flow: row wrap;    
    flex-flow: row wrap;
}

.flex-item {
    -webkit-flex:1 auto;
    -moz-flex:1 auto;
    -ms-flex:1 auto;
    flex:1 auto;
}

您可以在 Caniuse 上查看对 flex 浏览器的支持

用户 Cimmanon 提出的观点,前缀选择器可能与您的问题无关,但不知何故,在阅读了您的 .css 声明后,我注意到您没有设置“基本”CSS3 声明 (dispaly:box; flex-box :1;)。所以我想了一秒钟,这可以解释你的情况,事实并非如此。

【讨论】:

  • 缺少前缀与问题无关。没有浏览器支持 2009 规范中的无前缀属性。 Opera 从不支持 2009 规范,并且它们对当前规范的支持是无前缀的。
  • @cimmanon : 在css-tricks.com/using-flexbox 中提到 :: "如果我们将旧的、新的和中间的语法结合在一起,我们可以获得不错的浏览器支持。特别是对于一个简单且可能是最常见的用例:订单控制的网格”。 Bur 你是对的,前缀与 OP 问题无关。
  • 如果该链接与问题或您的答案完全相关,将会很有趣。我希望这篇文章不是您对 Flexbox 模块的专业知识的总结,因为它的内容非常简单。
  • @cimmanon, -webkit-box-flex 属性是 -vendor-specific 吗?不 ?另外,原始问题中的 css 只处理 -moz-xxx 和 -webkit-xxx 而不处理 CSS3 ?正确的 ? OP没有提到“浏览器”范围?对吧?
猜你喜欢
  • 2017-01-12
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多