添加浮动标签到 Semantic UI React 垂直菜单后,分隔符消失

3
我对一个问题感到困惑,无法理解。为了演示目的,我包含了 Semantic UI 的垂直菜单组件。如第一张图片所示,一切都很正常,也是我想要的,但是当我在 <Menu /> 上添加了 floated='right' 标签后,底部分隔线消失了。
这是预期的方式: This is the way it's supposed to be 添加 'floated' 标签后的情况如下: This is what happens when the 'floated' tag is added
import React, { Component } from 'react'
import { Header, Menu } from 'semantic-ui-react'

export default class MenuExampleText extends Component {
   state = {}

   handleItemClick = (e, { name }) => this.setState({ activeItem: name })

   render() {
      const { activeItem } = this.state

      return (
         <Menu vertical> // <Menu vertical floated='right'> removes the divider
            <Menu.Item
               name='promotions'
               active={activeItem === 'promotions'}
               onClick={this.handleItemClick}
            >
               <Header as='h4'>Promotions</Header>
               <p>Check out our new promotions</p>
            </Menu.Item>

            <Menu.Item
               name='coupons'
               active={activeItem === 'coupons'}
               onClick={this.handleItemClick}
            >
               <Header as='h4'>Coupons</Header>
               <p>Check out our collection of coupons</p>
            </Menu.Item>

            <Menu.Item
               name='rebates'
               active={activeItem === 'rebates'}
               onClick={this.handleItemClick}
            >
               <Header as='h4'>Rebates</Header>
               <p>Visit our rebate forum for information on claiming rebates</p>
            </Menu.Item>
         </Menu>
      )
   }
}

在调整 CSS 时,拥有一个实时示例很有帮助(可以使用浏览器的调试工具在页面呈现时编辑 CSS)。你能否在 React 之外创建一个最简 HTML/CSS 副本? - crapier
2个回答

1

除非您能为我们重现此问题或有人曾经遇到过此问题,否则我不确定是否有人能够帮助您。在HTML中重现您的菜单并使用float:right;似乎没有相同的问题。

编辑:更新片段以更紧密地遵循您的代码段,并包括display:none的CSS修复,这是您接受的答案。

const {
  Menu,
  Header
} = semanticUIReact

class App extends React.Component {
  state = {}

  handleItemClick = (e, { name }) => this.setState({ activeItem: name })

  render() {
    const { activeItem } = this.state

    return (
      <Menu vertical style={styles.sidebarMenu} floated='right'>
        <Menu.Item
          name='promotions'
          active={activeItem === 'promotions'}
          onClick={this.handleItemClick}
        >
          <Header as='h4'>Promotions</Header>
          <p>Check out our new promotions</p>
        </Menu.Item>

        <Menu.Item
          name='coupons'
          active={activeItem === 'coupons'}
          onClick={this.handleItemClick}
        >
          <Header as='h4'>Coupons</Header>
          <p>Check out our collection of coupons</p>
        </Menu.Item>
        
        <Menu.Item
          name='deals'
          active={activeItem === 'deals'}
          onClick={this.handleItemClick}
        >
          <Header as='h4'>Deals</Header>
          <p>Check out our collection of deals</p>
        </Menu.Item>

        <Menu.Item
          name='rebates'
          active={activeItem === 'rebates'}
          onClick={this.handleItemClick}
        >
          <Header as='h4'>Rebates</Header>
          <p>Visit our rebate forum for information on claiming rebates</p>
        </Menu.Item>
      </Menu>
    )
  }
}

const styles = {
  sidebarMenu: {
        marginLeft: 0,
        marginRight: 0,
        height: '100vh'
    },
}

// ----------------------------------------
// Render
// ----------------------------------------
const mountNode = document.getElementById('react-app-mount')
ReactDOM.render(<App />, mountNode)
.ui.floated.menu .item:last-child:before { 
  display: block !important;
 }
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
<script src="https://unpkg.com/semantic-ui-react/dist/umd/semantic-ui-react.min.js"></script>

<div id="react-app-mount"></div>


实际上在 HTML 中没有这个问题。由于无论我尝试什么,结果都一样,所以 Semantic UI React 中肯定存在一个 bug。 - merrilj
如果您在公共可访问的某个页面上托管了存在问题的内容,那么我或其他人可能可以通过这种方式对其进行调试? - crapier
是的,我已经在CodePen上重新创建了这个问题。您可以通过此链接访问它:https://codepen.io/merrilj/pen/XVKEgW。如果您从<Menu />中删除floated ='right',则分隔符将重新出现。 - merrilj
我在semantic.min.css中找到了有问题的CSS,其中存在.ui.floated.menu .item:last-child:before { display: none; },它会从最后一个元素中移除分隔符。这就是你需要纠正的地方。 - crapier
我不确定在React中修复这个问题的最佳方法,但我建议使用类似于.ui.floated.menu .item:last-child:before { display: block !important; }的样式表进行附加。如果您已经在附加样式表,请将其添加到您自己的样式表中。唯一的其他选择是在最后两个元素之间(或在最后一个元素中)添加自己的div,并手动将其样式设置为当前分隔符。 - crapier
我有一个现有的样式表附在上面。这似乎修复了问题,非常感谢您的帮助! - merrilj

0
对于未来的观众,我能想到的最好解决方案是在您要向右浮动的菜单项内创建一个第二个菜单。这样应该使其显示正常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接