litehtml icon indicating copy to clipboard operation
litehtml copied to clipboard

CSS menu doesn't work on old unicode.org

Open stasoid opened this issue 3 years ago • 2 comments

Site: old unicode.org Problem: left menu doesn't work. Minirepro:

<style>

li
{
    position: relative;
    width: 1em;
}

li ul
{
    position: absolute;
    top: 0;
    left: 1em;
    display: none;
}

li:hover ul
{
    display: block;
}

</style>

<ul>
  <li>item
    <ul>
      <li>subitem</li>
    </ul>
  </li>
</ul>

This should display subitem when hovering item.

stasoid avatar Dec 20 '22 14:12 stasoid

Funny. I ran into the same problem today with this:

<style>
    p + div {
        display: none;
    }
    p:hover + div {
        display: inline-block;
    }
    p {
        display: inline-block;
    }
</style>

<p>p1</p>
<div>
    <p>123</p>
</div>

Seems to me that display:none prevents the creation of a render_item and a style change doesn't create one.

Edit: To generalize it: display changes are only handled properly, when they're in the same "family" (see element::create_render_item).

TobiasBohnen avatar Dec 20 '22 17:12 TobiasBohnen

Currently changing of "display" css property doesn't handled correctly. Actually even is the element size is changed by :hover this will not handled by litehtml correctly.

Currently the only way to make menu compatible with litehtml is using visibility css property. Example:

<style type="text/css">
	ul.menu
	{
		display: block;
		list-style-type: none;
		padding: 10px;
		width: 6em;
	}

	ul.menu li
	{
		position: relative;
	}

	ul.menu li:hover
	{
		background-color: black;
		color: white;
	}

	ul.menu li:hover ul.submenu 
	{
		visibility: visible;
	}

	ul.menu li:hover ul.submenu li:hover
	{
		background-color: darkgrey;
		color: white;
	}

	ul.submenu
	{
		width: 200px;
		top: 0;
		left: 6em;
		background-color: lightgray;
		position: absolute;
		display: block;
		visibility: hidden;
		list-style-type: none;
		padding: 10px;
	}
</style>

<ul class="menu">
	<li>Menu item1
		<ul class="submenu">
			<li>Submenu item1-1</li>
			<li>Submenu item1-2</li>
			<li>Submenu item1-3</li>
		</ul>
	</li>
	<li>Menu item2
		<ul class="submenu">
			<li>Submenu item2-1</li>
			<li>Submenu item2-2</li>
			<li>Submenu item2-3</li>
		</ul>
	</li>
	<li>Menu item3
		<ul class="submenu">
			<li>Submenu item3-1</li>
			<li>Submenu item3-2</li>
			<li>Submenu item3-3</li>
		</ul>
	</li>
</ul>

tordex avatar Dec 20 '22 22:12 tordex