Почему мои <li>не увеличивают ширину, чтобы охватить весь контент? - PullRequest
2 голосов
/ 29 апреля 2020

Я отобразил <ul> display: flex;. <li> переходят в новый столбец, но <li> не расширяется с шириной <ul>, вызывая эффект переполнения.

// Select the main list and add the class "hasSubmenu" in each LI that contains an UL
$('ul').each(function(){
  $this = $(this);
  $this.find("li").has("ul").addClass("hasSubmenu");
});
// Find the last li in each level
$('li:last-child').each(function(){
  $this = $(this);
  // Check if LI has children
  if ($this.children('ul').length !== 0){
    // Add the class "addBorderBefore" to create the pseudo-element :defore in the last li
    $this.closest('ul').children("li").last().children("a").addClass("addBorderBefore");
    // Add margin in the first level of the list
    $this.closest('ul').css("margin-top","20px");
    // Add margin in other levels of the list
    $this.closest('ul').find("li").children("ul").css("margin-top","20px");
  };
});

// Add bold in li and levels above
$('ul li').each(function(){
  $this = $(this);
  $this.mouseenter(function(){
    $( this ).children("a").css({"font-weight":"bold","color":"#336b9b"});
  });
  $this.mouseleave(function(){
    $( this ).children("a").css({"font-weight":"normal","color":"#428bca"});
  });
});
// Add button to expand and condense - Using FontAwesome
$('ul li.hasSubmenu').each(function(){
  $this = $(this);
  $this.prepend("<a href='#'><i class='fa fa-minus-circle'></i><i style='display:none;' class='fa fa-plus-circle'></i></a>");
  $this.children("a").not(":last").removeClass().addClass("toogle");
});
// Actions to expand and consense
$('ul li.hasSubmenu a.toogle').click(function(){
  $this = $(this);
  $this.closest("li").children("ul").toggle("slow");
  $this.children("i").toggle();
  return false;
});

/* My Changes */
$('ul').not(':first').css('position', 'absolute');
$('li').css('text-align', 'start');

$('ul li:first-child').each(function () {
    $this = $(this);
    $this.prepend('<b style = "display: inline-block; width: 55px; height: 25px; position: relative; left: 0em; border-bottom: 4px solid gray; border-left: 4px solid gray; margin-bottom: -10px;"> </b>');
});

$('ul').not(':first').each(function () {
    $this = $(this);
    var positionLeft = 0;
    if ($this.closest("li").is(":first-child")) positionLeft = positionLeft + 55; // 55 is this.closest("li:before") width
	positionLeft = positionLeft + 10; // 50 for 'li a padding-left=10';
    positionLeft = positionLeft + $this.prev("a").width() / 2; // item text
    $this.css('left', positionLeft);
});
ul {
    padding: 0em;
    width: 100%;
    height: 20px;
    text-align: center;
    display: flex;
}

ul li, ul li ul li {
    position:relative;
    top:0;
    bottom:0;
    padding-bottom: 7px;

}

li {
    display: inline-block;
    white-space: nowrap;
    *display: inline; /*IE7*/
    *zoom: 1; /*IE7*/
    margin-right: 25px;
    list-style-type: none;
    width: inherit;
    float: none;
    text-align: right;
}

li a {
    padding:0 0 0 10px;
    position: relative;
    top:1em;
}

li a:hover {
    text-decoration: none;
}
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="./MultiNestedListTree.css">
    <link href="https://www.jqueryscript.net/css/jquerysctipttop.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css">
</head>
<body>
    <div>
        <!-- class="container body-content"> -->
        <div>
        <!--class="container"-->
			<ul>
				<li>
					<a href="#">Manchester</a>
					<ul>
						<li>
							<a href="#">Magazine</a>
							<ul>
								<li><a href="#">Spiral Scratch</a></li>
								<li><a href="#">Real Life</a></li>
								<li><a href="#">Secondhand Daylight</a></li>
								<li><a href="#">The Correct Use</a></li>
							</ul>
						</li>
						<li>
							<a href="#">Buzzcocks</a>
							<ul>
								<li><a href="#">Time's Up</a></li>
								<li><a href="#">Another Music in A Different Kitchen</a></li>
								<li><a href="#">Love Bites</a></li>
								<li><a href="#">A Different Kind Of Tension</a></li>
							</ul>
						</li>
						<li>
							<a href="#">Joy Division</a>
							<ul>
								<li><a href="#">Unknown Pleasures</a></li>
								<li><a href="#">Closer</a></li>
								<li><a href="#">Still</a></li>
							</ul>
						</li>
					</ul>
				</li>
				<li>
					<a href="#">Liverpool</a>
					<ul>
						<li>
							<a href="#">OMD</a>
							<ul>
								<li><a href="#">OMD</a></li>
								<li><a href="#">Organisation</a></li>
							</ul>
						</li>
						<li>
							<a href="#">Echo & the Bunnymen</a>
							<ul>
								<li><a href="#">Crocodiles</a></li>
								<li><a href="#">Heaven Up Here</a></li>
								<li><a href="#">Porcupine</a></li>
							</ul>
						</li>
					</ul>
				</li>
			</ul>
		</div>
    </div>
	
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="./MultiNestedListTree.js"></script>
    
</body>
</html>

    

1 Ответ

1 голос
/ 29 апреля 2020

Я не уверен, правильно ли я понимаю вопрос, но, возможно, проблема в том, что absolute позиционирует эти ul -ы. Вы не можете ожидать, что элементы с position: absolute будут равны sh элементам вокруг них по мере их роста. Попробуйте с position: relative.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...