假设<details>元素不是块级元素,我错了吗?

时间:2017-07-21 14:32:09

标签: css html5

我想确定<details>是否是块级元素。我问的原因是:

  1. MDN有一个完整的&#34; list表示所有块级元素,<details>不在列表中。
  2. 此元素上的W3C spec未提及它是块级元素
  3. 与#2相同,但对于MDN resource
  4. W3C HTML5 elements spec
  5. 的#2相同

    1. #3中的规范具有<details>的Codepen。当您在Firefox(54.0.1)中打开此Codepen并检查<details>元素时,它是inline但是当您在Chrome中打开相同的Codepen(59.0.3071)时,相同的元素设置为{用户代理样式表{1}}。
    2. block元素是内联还是阻止,还是依赖于浏览器?

2 个答案:

答案 0 :(得分:2)

<details>元素表现为块级元素。为了测试这个,我打开了一个jsfiddle,添加了一个<details>元素并进行了检查。我也能把它设置为内联就好了。

当前版本的Microsoft Edge不支持此元素,因此我不建议在生产环境中使用它。

编辑:我忘记评论您的Firefox观察,我的Firefox版本是最新的,并将其显示为块元素。

答案 1 :(得分:1)

在这样的事情上:

private class CustomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int TYPE_1 = 1;
private static final int TYPE_2 = 2;
private static final int TYPE_3 = 3;
// more types...

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType) {
        case TYPE_1: inflate view_type_1
            break;
        case TYPE_2: inflate view_type_2
            break;
        case TYPE_3: inflate view_type_3
            break;
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (getItemViewType(position)) {
        case TYPE_1:
            break;
        case TYPE_2:
            break;
        case TYPE_3:
            break;
    }
}

@Override
public int getItemViewType(int position) {
    if(position == 1) {
        return TYPE_1;
    } else if(position == 2) {
        return TYPE_2;
    } else 
        return TYPE_3
}
}

...... W3C HTML Validator说:

  

在此上下文中,元素details不允许作为元素span的子元素。

     

可以使用元素details的上下文:
  预计flow content的位置   元素span的内容模型:
  Phrasing content

如果您按照两种内容类型的链接,您会发现两个不同的标记列表,并且许多标记属于两者

我怀疑块/内联差异是HTML早期的一个关键概念,但它不再相关。 HTML5和CSS3都没有定义为元素必须明确匹配其中一个类别的术语。